2013-12-12 59 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