我想知道如何从字符串中解析几个双数,但字符串可以混合,例如:String s = "text 3.454 sometext5.567568more_text"
。
标准方法(Double.parseDouble
)不合适。我尝试使用isDigit
方法解析它,但是如何解析其他字符和.
?
感谢。
答案 0 :(得分:7)
您可以搜索following regex:
Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")
然后在每场比赛中使用Double.parseDouble()
。
答案 1 :(得分:3)
使用适当的正则表达式(如此代码或其他帖子)解析双打后,迭代以将匹配的匹配项添加到列表中。在这里,myDoubles
可以在代码中的任何其他位置使用。
public static void main ( String args[] )
{
String input = "text 3.454 sometext5.567568more_text";
ArrayList < Double > myDoubles = new ArrayList < Double >();
Matcher matcher = Pattern.compile( "[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?" ).matcher( input );
while ( matcher.find() )
{
double element = Double.parseDouble( matcher.group() );
myDoubles.add( element );
}
for ( double element: myDoubles )
System.out.println( element );
}
答案 2 :(得分:1)
解析子字符串(用空格包围)
使用String.ParseDouble()获取数值
这是一个例子,使用“split()”来解析(有很多选择):
// http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html
String phrase = "the music made it hard to concentrate";
String delims = "[ ]+";
String[] tokens = phrase.split(delims);
这是第二种选择:
答案 3 :(得分:0)
您需要考虑使用哪种算法进行此操作,因为它并不完全明显。如果子字符串是asdf.1asdf
,那么应该将其解析为小数值0.1
还是仅仅1
?
此外,某些嵌入数字是否可以为负数?如果不是这样可以大大简化搜索空间。
我认为 aix 使用正则表达式是正确的,因为一旦你想出一个算法,这听起来就像状态机的工作类型(扫描输入直到你找到一个数字或可选的-
或.
,然后查找下一个“非法”字符并正常解析子字符串。
这是您必须考虑的边缘情况 - 例如,如果没有负数,您可以几乎使用s.split("[^0-9.]")
并过滤掉非空元素。但是,不属于数字的句点字符将为您提供帮助。无论你采用什么解决方案,都要考虑是否有任何情况可以解决它。