2015-11-06 147 views
-1

我有一個構造函數接受一個字符串,看起來像「南行 - Metrotown」。Java拆分字符串ArrayIndexOutOfBoundsException

它所帶的字符串總是不同,但具有相同的格式:方向 - 位置。我正在使用split()方法在連字符處拆分此字符串(unicode 44)。

構造和返回的方法是這樣的

String[] splt; 
String dirn; 
String plat; 

public Arrival(String platform) { 
    this.platform = platform; 
    splt = platform.split("-"); 
    dirn = splt[0]; 
    plat = splt[1]; 
} 
public String getTravelDirn() { 
    return dirn.trim(); 
} 
public String getPlatformName() { 
    return plat.trim(); 
} 

我可以打印出來的效果很好,但是當我用JUnit測試它,

@Before 
public void setUp() { 
    arr = new Arrival(platform); 
} 

@Test 
public void testArrivalGetPlatform() { 
    System.out.println(arr.getPlatformName()); 
    assertTrue(arr.getPlatform().equals("Metrotown")); 

結果打印出來鐵道鎮,但assertTrue線失敗。我能做些什麼來解決這個問題?感謝您的時間。

+0

嘗試打印您傳遞給構造函數的參數。我懷疑它沒有'-'或其'''是不是你在你的分裂中使用的字符。或者,也許這個錯誤與'plat = splt [1]'行沒有關係;'但是對於你沒有向我們顯示的其他行。 – Pshemo

+0

也許'splt = platform.split(「 - 」);'doesnt split(does not have'splt [1]')? – Sekula1991

+0

嘗試'for(String str:platform.split(「 - 」))'看看你會得到什麼。什麼是splt的類型? – 2015-11-06 23:46:22

回答

1

platform參數值沒有破折號。

當沒有進行拆分匹配時,整個字符串作爲單個元素數組的第一個元素返回。試圖訪問索引0以外的任何元素都會導致該異常。

+1

只有當我們假設錯誤來自'plat = splt [1]'這行時,纔會出現這種情況;'但是說實話,沒有堆棧跟蹤,我們無法確定這一點。 OP還有機會從源代碼(如某個頁面)讀取一些不使用標準短劃線「 - 」而是其他字符的數據,例如這兩個短劃線是不同的字符:代碼爲44和8211的' - -'。 – Pshemo

+0

更正:這些破折號8210和8211的索引。是我在代碼中使用的',':) – Pshemo