2016-03-08 47 views
0

我正在做一个简单的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 

虽然它显然不是。我用错了吗?任何想法是怎么回事?

+0

东西是关闭与你的字符串,当我字面上运行该字符串并拆分它时,我得到'[2015 10 04]'; – 2016-03-08 22:15:03

+1

您需要提供一个可重现的示例:[如何创建最小,完整和可验证示例。](http://stackoverflow.com/help/mcve) – peterSO

回答

7

下面是一个完整的工作示例:

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 

Playground


也许你没有使用正确的 “破折号” 字? 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]) 
} 

Playground.

+1

是的,我也是。它必须表明Mitchell的“字符串”以某种方式受到无效字节或隐藏字符的污染。 – 2016-03-08 22:15:25

+0

@Allendar我同意。我在其他Unicode破折号的示例中添加了这可能是他的问题 – Tyler

+2

是的,破折号不匹配。永远不会想到这一点,谢谢! –