2015-04-27 38 views
1

下面的代码将字符串拆分为\n。对于小输入它确实工作,但长输入它不像预期的那样工作\n。 为了研究相同的讨论here。 书面测试用例来验证行为。 它正在按预期工作\n在那里,因为有一个建议在回答测试\\\\n作为正则表达式时,我试着用这个程序我得到了字符串数组长度计算的差异。 下面有代码和我发现的差异。字符串数组长度不一致,使用相同的正则表达式输入相同的输入

public String[] token=new String[10]; 
public Addnumber(String input) { 
    // TODO Auto-generated constructor stub 
    this.token=input.split("\n"); 
    System.out.println("Inside constructor Length="+token.length); 
    for(String s:token) 
     System.out.println(s); 
} 

public static void main(String[] args) { 
    String input="hi\niam\nhere"; 
    String input1="hi\niam\nhere"; 
    String input2="x = [2,0,5,5]\ny = [0,2,4,4]\n\ndraw y #0000ff\ny = y & x\ndraw y #ff0000"; 
    new Addnumber(input1);//calculating via constructor 
    new Addnumber(input2); 
    String[] istring=new String[10]; 
    //Calculating in main method 
    // General expression of \n 
    istring=input.split("\n"); 
    System.out.println("Length calcluated when \n as regex="+istring.length); 
    for(String s:istring) 
      System.out.println(s);  
    istring=input2.split("\\\\n"); //Check the regex used here 
    System.out.println("Length calcluated when \\\\n as regex="+istring.length); 
    for(String s:istring) 
     System.out.println(s); 
} 

在如下

Inside constructor Length=3 
hi 
iam 
here 
Inside constructor Length=6 
x = [2,0,5,5] 
y = [0,2,4,4] 

draw y #0000ff 
y = y & x 
draw y #ff0000 
Length calcluated when 
as regex=3 
hi 
iam 
here 
Length calcluated when \\n as regex=1 
x = [2,0,5,5] 
y = [0,2,4,4] 

draw y #0000ff 
y = y & x 
draw y #ff0000 

请注意当\n是正则表达式然后串数组的长度预期,但执行该程序输出时\\\\n作为正则表达式被表示长度为1,但 的内容分割与之前相同。为什么在正则表达式表达式变化时计算长度差异? :

回答

1

我觉得你有点错过了上述问题的my answer这一点。

当使用split("\\n")分割字符串时,可以用换行符分割它。

使用split("\\\\n")分割字符串时,按文字序列\n分割。

original question中,字符串是通过用户输入获得的,用户输入字面为\n。因此,需要使用\\\\n正确分割它。

如果你要模拟的字面\n用户输入您的样本字符串将需要是这样的:如果你想知道为什么你最后的样品中,它显示的长度1

String input2 = "x = [2,0,5,5]\\ny = [0,2,4,4]\\n\\ndraw y #0000ff\\ny = y & x\\ndraw y #ff0000"; 

,但仍然将字符串部分呈现在不同的行上:它只是正在呈现的输入字符串中的换行符。

+0

这里的问题是为什么字符串数组长度值显示1时,它能够成功地分割内容? –

+0

没有分开。您的输出只呈现输入字符串中的换行符。 –

+1

感谢Robby的澄清。 –

0

split("\n")以换行符分隔。你在你的字符串中有这个,所以你会分裂。

split("\\\\n")按反斜杠和换行符分割。正则表达式和Java字符串都有转义语义,所以字符串"\\\\n"实际上是正则表达式\\n(反斜杠和n)。 "\n"在正则表达式中产生一个文字换行符; "\\n"会生成正则表达式\n,该正则表达式引擎读取为换行符。这两者都会让你在换行上发生分裂;但大概是,您的字符串不包含反斜杠后跟一个n,因此split("\\\\n")失败并返回您开始的一个元素。

相关问题