2014-02-14 51 views
0
String realstring = "&&&.&&&&"; 
Double value = 555.55555; 
String[] arraystring = realstring.split("."); 
String stringvalue = String.valueof(value); 
String [] valuearrayed = stringvalue.split("."); 
System.out.println(arraystring[0]); 

对不起,如果它看起来不好。重写了我的手机。我不断收到ArrayIndexOutOfBoundsException: 0System.out.println。我看了,也找不出来。谢谢您的帮助。阵列有问题,也许分裂

+8

split将regexp作为参数,而不是文字字符串。你必须逃避这一点。或者你也可以简单地使用indexOf('。')和substring()。 –

+1

@JBNizet我觉得这应该是答案:) –

+1

我屈服于压力:) –

回答

8

split()将regexp作为参数,而不是文字字符串。你必须逃脱点:

string.split("\\."); 

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

或者你也可以简单地使用indexOf('.')substring()让您的字符串的两个部分。

如果我们的目标是获得一个双的整数部分,你也可以简单地使用

long truncated = (long) doubleValue; 
+0

但为什么数组是空的?这是另一半的难题:) –

+0

我会让你为此添加一个答案。我讨厌正则表达式:) –

+2

要分割,我真的更喜欢使用Guava的Splitter,它更合乎逻辑,可预测,高效且易于使用:http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter –

2

点(。)是一个特殊字符,所以你需要逃避它。

String realstring = "&&&.&&&&";   
String[] partsOfString = realstring.split("\\."); 
String part1 = partsOfString[0]; 
String part2 = partsOfString[1]; 
System.out.println(part1); 

这将打印预期的

& & &

它也很方便的测试,如果给定的字符串包含此字符的结果。您可以通过执行此操作:

if (string.contains(".")) { 
    // Split it. 
} else { 
    throw new IllegalArgumentException("String " + string + " does not contain ."); 
} 
7

split使用正则表达式作为参数,并在正则表达式.的意思是“除了行分隔符的任何字符”,所以你可以指望"a.bc".split(".")将创建空字符串数组一样["","","","",""]。只有它是不会发生的原因是因为(从splitjavadoc

此方法的工作方式类似于与给定的表达和为零的限制参数调用两参数split方法。 因此尾随的空字符串不包含在结果数组中。

因为所有的字符串都是空的,所以你得到空数组(因为你看到了ArrayIndexOutOfBoundsException)。

要关闭移除机制,您必须使用split(regex, limit)版本,并使用负号limit

拆就.文字你需要\.逃脱它(在Java需要写成"\\."因为\也是元字符的字符串)或[.]或其他正则表达式机制。

+1

+1用于解释发生异常的原因。 –

+0

感谢您的解释,谢谢 – Lifetake

+0

@Letadeke没问题。很高兴你喜欢 :) – Pshemo