2013-12-12 153 views
1

我使用的方法在該行:運行時錯誤(「|」)

f.getCmbAttori().getSelectedItem().toString().split("|") 

與像輸入「13 |伊爾SIGNORE阿布魯Anelli」和insted的回報:

f.getCmbAttori().getSelectedItem().toString().split("|")[0] = "13" 
f.getCmbAttori().getSelectedItem().toString().split("|")[1] = "Il Signore degli Anelli" 

它返回一個數組,其中的每個字符單獨是這樣的:

f.getCmbAttori().getSelectedItem().toString().split("|")[0] = "" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[1] = "1" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[2] = "3" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[3] = "|" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[4] = "I" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[5] = "l" 
[...] 

    f.getCmbAttori().getSelectedItem().toString().split("|")[25] = "l" 
    f.getCmbAttori().getSelectedItem().toString().split("|")[26] = "i" 

怎麼可能呢?我正在以一種錯誤的方式推翻這種方法?下面的一段代碼,我使用:

PreparedStatement stmSql = null; 
       int risultato = 0;     
       stmSql = f.conn.prepareStatement("insert into recita (CodAttore, CodFilm) values (?, ?)"); 
       stmSql.setInt(1, Integer.parseInt(f.getCmbAttori().getSelectedItem().toString().split("|")[1])); 
       stmSql.setInt(2, Integer.parseInt(f.getCmbFilmRecita().getSelectedItem().toString().split("|")[1])); 
       risultato = stmSql.executeUpdate(); 
+3

使用'split(「\\ |」)「'。 –

+1

'「|」'是一個特殊的正則表達式字符。如果你真的想分割''|''use'.split(「\\ |」);' –

回答

5

的String.split函數接受一個正則表達式,請嘗試使用此:

split("\\|") 

這將使分割上文字|

+1

不要確定,**確定**:['String#split(String regex)'' ](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)):*參數:regex - 分隔正則表達式*。 –

+0

我確實去過並檢查過,我只是忘了改變我寫的內容...... – M21B8

+0

我也是說,最好參考官方文檔來加強你答案的內容。 –

2

一般來說,如果你想通過固定字符串(而不是一個正則表達式)使用quote分裂:

.split(Pattern.quote("|")) 
1

嘗試split("\\|");

,或者你可以在普通使用

split(Pattern.quote("|")); 

java.lang.String.split分裂表達式。

十二個字符有特殊含義的正則表達式:反斜槓\,光標^,美元符號$,句點或點.,豎線或管道符號|,問號?,星號或星* ,加號+,右括號(,右括號),開口方括號[,以及開口大括號{

這些特殊字符通常被稱爲"metacharacters"

對於More