我正在做一个简单的strings.Split日期。strings.Split代理怪异
格式是2015-10-04
month := strings.Split(date, "-")
输出是[2015 10 03]
。
如果我做month[0]
它返回2015年,但是当我做一个月[1],它返回
panic: runtime error: index out of range
虽然它显然不是。我用错了吗?任何想法是怎么回事?
我正在做一个简单的strings.Split日期。strings.Split代理怪异
格式是2015-10-04
month := strings.Split(date, "-")
输出是[2015 10 03]
。
如果我做month[0]
它返回2015年,但是当我做一个月[1],它返回
panic: runtime error: index out of range
虽然它显然不是。我用错了吗?任何想法是怎么回事?
下面是一个完整的工作示例:
package main
import "strings"
func main() {
date := "2015-01-02"
month := strings.Split(date, "-")
println(month[0])
println(month[1])
println(month[2])
}
输出:
2015
01
02
也许你没有使用正确的 “破折号” 字? There are lots:
+-------+--------+----------+
| glyph | codes |
+-------+--------+----------+
| - | U+002D | - |
| ֊ | U+058A | ֊ |
| ־ | U+05BE | ־ |
| ᠆ | U+1806 | ᠆ |
| ‐ | U+2010 | ‐ |
| ‑ | U+2011 | ‑ |
| ‒ | U+2012 | ‒ |
| – | U+2013 | – |
| — | U+2014 | — |
| ― | U+2015 | ― |
| ⁻ | U+207B | ⁻ |
| ₋ | U+208B | ₋ |
| − | U+2212 | − |
| ﹘ | U+FE58 | ﹘ |
| ﹣ | U+FE63 | ﹣ |
| - | U+FF0D | - |
+-------+--------+----------+
下面是用不同的输入字符串,这也引发索引超出范围异常的代码:
包主
import "strings"
func main() {
date := "2015‐01‐02" // U+2010 dashes
month := strings.Split(date, "-")
println(month[0])
println(month[1])
println(month[2])
}
是的,我也是。它必须表明Mitchell的“字符串”以某种方式受到无效字节或隐藏字符的污染。 – 2016-03-08 22:15:25
@Allendar我同意。我在其他Unicode破折号的示例中添加了这可能是他的问题 – Tyler
是的,破折号不匹配。永远不会想到这一点,谢谢! –
东西是关闭与你的字符串,当我字面上运行该字符串并拆分它时,我得到'[2015 10 04]'; – 2016-03-08 22:15:03
您需要提供一个可重现的示例:[如何创建最小,完整和可验证示例。](http://stackoverflow.com/help/mcve) – peterSO