Go语言中文网 为您找到相关结果 25

golang substring

在java下习惯了String.subString(start,end) 然后再golang继续敲substring木有了,看了下代码,也是原生支持的 但是百度发现有些人竟然把字符串转成字符数组再根据下标取,简直误人子弟 go的string 支持直接根据 index 截取字符串的 例如 str := "hello world" fmt.Print(str[0:5]) 运行的时候将会输出 hello 很简单...阅读全文

博文 2015-02-28 03:00:01 modprobe

golang截取字符串

//截取字符串 start 起点下标 length 需要截取的长度 func Substr(str string, start int, length int) string { rs := []rune(str) rl := len(rs) end := 0 if start < 0 { start = rl - 1 + start } end = start + length if start > end { start, end = end, start } if start < 0 { start = 0 } if start > rl { start = rl } if end < 0 { end = 0 } if end > rl { end = rl } return stri...阅读全文

博文 2015-06-18 17:04:30 u012210379

go字符串截取笔记

当我在go语言编程过程中第一次碰到需要截取字符串的时候,首先想到的是 strings 包里面可能有相关方法~ 我还是太年轻了,这些年都被脚本语言惯坏了~ 好吧,只能自己搞了,思路也很清晰,把字符串转成字节数组,然后使用slice切片得到其中想要截取的一段,最后再通过 T() 强制类型转换还原成字符串,一开始比较简单: s := "abcdefg" s = string([]byte(s)[:3]) fmt.Println(s) //得到 "abc" 似乎简单啊,但如果碰到中文咋办?根据常识,一个中文字符肯定不止一个字节,难道我还得遍历每个字节,判断编码,判断ascii码范围?那也太麻烦了吧,当然如果必须这么处理的话,肯定人已经造过轮子,google一下定有收获。 幸运的是我不需要考虑那么多,...阅读全文

博文 2017-02-18 04:00:32 吾爱

golang 字符串查找 中间字符 截取

func GetBetweenStr(str, start, end string) string { n := strings.Index(str, start) if n == -1 { n = 0 } str = string([]byte(str)[n:]) m := strings.Index(str, end) if m == -1 { m = len(str) } str = string([]byte(str)[:m]) return str } func Substr(str string, start, length int) string { rs := []rune(str) rl := len(rs) end := 0 if start < 0 { start = ...阅读全文

博文 2014-10-04 19:27:22 lesou

Golang 字符串比较,一个不大不小的坑

背景是酱紫的,对一串字符串做了AES解密后得到的密文,从密文中截取了签名,和之前存在数据库里的签名进行比较验签的时候,一直失败,打印两个签名值出来看,一模一样... Google后在一篇博客里发现了这句'String values are compared byte-wise (lexically).' and 'zero value for string is "" ',大概的意思就是,string 的比较实际上是比较对应的byte数组的,之后打印了两个签名的byte值,玄机显现,密文中的签名值最后有7,7,7,7,7]这样的值,目测是进行AES加密的时候加密算法补位导致的... 解决办法,根据数据库中签名值的长度对密文中的签名做了截取,然后比较,妥了... 推荐阅读:AES 图文详解,G...阅读全文

博文 2015-08-06 16:00:01 冰河垂钓

golang截取中文字符串

1.问题: 在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 2.解决方法: 先将其转为[]rune,再截取后,转会string nameRune := []rune(name) fmt.Println("string(nameRune[:4]) = ",string(nameRune[:4])) 运行结果: string(nameRune[:4...阅读全文

博文 2016-04-09 17:00:06 vrinux

Go语言截取字符串

go没有像php或js那样的Substr函数,而且如果直接用string加下标的方式输出的话,输出的是UTF8编码。 Go语言中用下标访问string类型(中文字符),输出的是什么编码? 下面提供简单的字符串截取方法: rs := []rune(str) fmt.Println(string(rs[起始位置:截取长度])) $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass(...阅读全文

博文 2016-04-30 00:00:02 Jesounao

golang按显示长度截取字符串

根据显示长度截取字符串,之前php用的utf8编码,10个英文和10个汉字的显示长度差距太大,按字节截取的话又会出错出现截取半个汉字的情况,所以写了这两个函数. 这两天在折腾golang,所以就用golang重写了着连个函数.代码如下: package main import ( "fmt" ) func main() { fmt.Println(show_strlen("哈哈1")) fmt.Println(show_substr("哈哈1什1么的", 9)) } 根绝显示长度截取字符串 func show_substr(s string, l int) string { if len(s) <= l { return s } ss, sl, rl, rs := "", 0, 0, []r...阅读全文

博文 2014-10-05 00:00:01 DarkWingBoy

golang浮点数精度问题

今天遇到一个浮点数截取后计算的问题。截取后的浮点数,再作运算,会导致精度不准确。这种不是必现,而是根据你作运算的具体浮点数决定。 必须想办法100%避免这种问题。 直接上代码吧 问题代码 package main import ( "fmt" "strconv" ) func main() { var ff, e float64 e = 100.00 ff = -0.210615789 ff = FloatRound(ff, 4) fmt.Println(ff) // 输出 -0.2106 qq := ff * e fmt.Println(qq) // 输出 -21.060000000000002 } // 截取小数位数 func FloatRound(f float64, n int) f...阅读全文

博文 2018-05-10 15:33:05 丶老邪

go语言rune法substring出错问题

网上一个substring的方法: func SubString(str string,begin,length int) (substr string) { // 将字符串的转换成[]rune rs := []rune(str) lth := len(rs) // 简单的越界判断 if begin < 0 { begin = 0 } if begin >= lth { begin = lth } end := begin + length if end > lth { end = lth } // 返回子串 return string(rs[begin:end]) }本人应用的时候发现,多次截取字符串时出现截取失败问题,后来仔细读了一些他的代码,发现有rune,修改了一些rune去掉之后就...阅读全文

博文 2015-06-17 23:07:20 u010499721

关于 golang 判断字符串+ 英文 长度

~~~ 假如 aa:= "中国abc" fmt.Println(len(aa)) //返回 9 因为我要判断一个字符串的 标题 和 内容 标题==100限制 内容==4000限制 if (len(aa) >4000){ //这里明显错误了, 因为文章里可能包含 英文 和 中文字符 ,一个中文字符占用3个字节 //然后截取 0~4000的字符 其余不要 aa = aa[0:4000] //这样截取出来的字符串明显不正确的, 中英文 的文章组合 判断有点难啊 没思路了 } ~~...阅读全文

golang 截取图片核心图,生成自定义尺寸和边距的新图

一、PPGo_CliImg概述PPGo_CliImg 是一个图片截取处理工具,基于Golang语言实现的图片截取处理工具。可以将底色是白色或者其他纯色的图片切割出来,并按照自定义尺寸和边距输出。类似另外一个python项目的效果: https://github.com/george518/CoreImage二、PPGo_CliImg有什么用1、快速切割图片的核心部分,并自定义尺寸和边距形成新的图片2、常用于电商平台的图片批量处理。3、含有golang常用的图片包使用方法,可以作为golang图片学习参考使用三、PPGo_CliImg的截取图片效果原图(为了便于看效果,这里选用底图颜色为浅绿色?):​截取一个 高200px,宽300px,边距为10px,位置居中的图片如下:​四、如何安装1、下...阅读全文

博文 2017-12-16 09:28:23 george518

算法基础:最大递减数问题(Golang实现)

给出一个非负整数,找到这个非负整数中包括的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。 如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。 假设输入的数字为负数,返回-1。 假设找不到递减数,也返回-1. 代码实现: package huawei import ( "fmt" "sort" "strconv" ) func Test5Base() { num := 431492 degressiveNums := getDegressiveNums(num) max := -1 if len(degressiveNums) > 0 { max = getMax(degressiveNums) } fmt.Println("...阅读全文

博文 2016-03-25 01:00:05 mengfanrong

golang截取字符串的性能相差200倍

package main import ( "fmt" "log" "strings" "time" ) func main() { str := "sum::goods_num" var content,content1 string var i int start1 := time.Now() for i = 0;i<1000000;i++ { content = str[5 : ] } elapsed := time.Since(start1) fmt.Println(elapsed) log.Println(content) start2 := time.Now() for i = 0;i<1000000;i++ { selectStruct := strings.Split(str...阅读全文

博文 2019-08-15 09:30:54 golanglover

日志内容按日期筛选工具date-filter

用于筛选当前时间到之前指定的范围内的日志内容的小工具,支持对php慢查询日志等多行日志文件的筛选。 上例中会输出发生时间在当前时间1分钟以内的日志。 日期格式使用Go语言标准的日期时间表示方法。 ![image](https://static.oschina.net/uploads/space/2017/0120/111920_Gvma_2896879.png) 例如 `-layout '2006-01-02 15:04:05'` `-layout '2006-01-02T15:04:05'` `-layout '02-Jan-2006 15:04:05'` 目前只支持固定时间偏移位置的方式获取时间。`o...阅读全文

开源项目 2017-02-07 04:00:07 mylxsw

go golang 判断base64数据 获取随机字符串 截取字符串

go golang 判断base64数据 获取随机字符串 截取字符串 先少写点,占个坑,以后接着加。 1,获取指定长度随机字符串 func RandomDigits(length int) string { return randomString(length, []byte(Digits)) } func randomString(length int, base []byte) string { bytes := make([]byte, length) maxIndex := len(base) for i := 0; i < length; i++ { index := rand.Intn(maxIndex) bytes[i] = byte(base[index]) } return...阅读全文

博文 2017-09-24 08:30:01 mingbai

golang 支持中文字符串截取, 支持end 负数截取

import ( "bytes" ) //支持中文截取, 支持end 负数截取 func SubStr(source interface{}, start int, end int) string { str := source.(string) var r = []rune(str) length := len(r) subLen := end - start for { if start < 0 { break } if start == 0 && subLen == length { break } if end > length { subLen = length - start } if end < 0 { subLen = length - start + end } var s...阅读全文

golang,python中字符串的截取。

package main import ( "fmt" "strings" ) func main() { a := "大大1122佛挡杀佛大大" c := Substr(a, "大大1", "杀") fmt.Println(c) } func Substr(str, startStr, endStr string) string { s := strings.Index(str, (startStr)) + len(startStr) e := strings.Index(str, (endStr)) if s == -1 { return "" } if e == -1 { return string(str[s:]) } return string(str[s:e]) } def su...阅读全文

博文 2017-10-23 14:03:11 大洋的顶端

记录一个小坑

golang的string在进行两个字符串比较时,会比较两个字符串底层的[]byte是否相同, 而不是单纯的比较字符串是否一样, 所以,在[]byte转字符串进行比较前需要将其中的byte切片进行等长度截取, 然后转换, 否则会产生长度不匹配问题. 代码如下: package main import ( "fmt" ) func main() { var test1 string = "hello" var test2 []byte = make([]byte, 1024) copy(test2, []byte("hello")) fmt.Println(test1 == string(test2)) fmt.Println(test1) fmt.Println(string(test2))...阅读全文

博文 2019-11-04 23:35:12 aside section._1OhGeD

【Go】高效截取字符串的一些思考

文链接:https://blog.thinkeridea.com/... 最近我在 Go Forum 中发现了 String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高效截取字符串的方法,这篇文章将逐步讲解我实践的过程。 字节切片截取 这正是 “hollowaykeanho” 给出的第一个方案,我想也是很多人想到的第一个方案,利用 go 的内置切片语法截取字符串: s := "abcdef" fmt.Println(s[1:4]) 我们很快就了解到这是按字节截取,在处理 ASCII 单字节字符串截取,没有什么比这更完美的方案了,中文往往占多个字节,在 utf8...阅读全文

博文 2019-10-31 09:02:38 thinkeridea

golang归并排序

func mergeSort(arr []int, start, end int) { if start >= end { return } mid:=(start + end) / 2 mergeSort(arr, start, mid) mergeSort(arr, mid+1, end) merge(arr, start, mid, end) } func merge(arr []int, start, mid, end int) { var tmparr = []int{} var s1, s2 = start, mid+1 for s1<= mid && s2<= end{ if arr[s1] > arr[s2] { tmparr = append(tmparr, arr[s2]...阅读全文

博文 2019-12-21 20:32:44 17701086291

【Go】高效截取字符串的一些思考

文链接:blog.thinkeridea.com/201910/go/e… 最近我在 Go Forum 中发现了 [SOLVED] String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高效截取字符串的方法,这篇文章将逐步讲解我实践的过程。 字节切片截取 这正是 “hollowaykeanho” 给出的第一个方案,我想也是很多人想到的第一个方案,利用 go 的内置切片语法截取字符串: s := "abcdef" fmt.Println(s[1:4]) 复制代码我们很快就了解到这是按字节截取,在处理 ASCII 单字节字符串截取,没有什么比这更完美的方案了,中文...阅读全文

博文 2019-10-31 16:34:27 thinkeridea

Go - Slice 切片

## 概述 切片是一种动态数组,比数组操作灵活,长度不是固定的,可以进行追加和删除。 `len()` 和 `cap()` 返回结果可相同和不同。 ## 声明切片 ``` //demo_7.go package main import ( "fmt" ) func main() { var sli_1 [] int //nil 切片 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_1),cap(sli_1),sli_1) var sli_2 = [] int {} //空切片 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_1),cap(sli_2),sli_2) var sli_3 = [] int {1...阅读全文

博文 2019-07-05 10:00:38 XinLiang