2016-03-08 17 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

是的,破折號不匹配。永遠不會想到這一點,謝謝! –