使用java扫描仪扫描字母和浮点数

时间:2017-06-19 14:29:10

标签: java java.util.scanner

我有一个看起来像这样的字符串:

" m 535.71429,742.3622 55.71428,157.14286 c 0,0 165.71429,-117.14286 -55.71428,-157.14286 z"

我希望java扫描程序输出以下字符串:" m"," 535.71429"," 742.3622"," 55.71428& #34;," 157.14286"," c",...

所以所有的东西都被逗号或空格分开,但我遇到了麻烦。

这就是我的代码的样子:

Scanner scanner = new Scanner(path_string);
scanner.useDelimiter(",||//s");
String s = scanner.next();
if (s.equals("m")){ 
    s = scanner.next();
    point[0] = Float.parseFloat(s);
    s = scanner.next();
    point[1] = Float.parseFloat(s);
    ....

但出来的字符串是:" m"," "," 5"," 3",...

2 个答案:

答案 0 :(得分:4)

我觉得麻烦在于// s。你必须使用这种模式:

scanner.useDelimiter("(,|\\s)");

正则表达式模式:

abc…    Letters
123…    Digits
\d      Any Digit
\D      Any Non-digit character
.       Any Character
\.      Period
[abc]   Only a, b, or c
[^abc]  Not a, b, nor c
[a-z]   Characters a to z
[0-9]   Numbers 0 to 9
\w      Any Alphanumeric character
\W      Any Non-alphanumeric character
{m}     m Repetitions
{m,n}   m to n Repetitions
*       Zero or more repetitions
+       One or more repetitions
?       Optional character
\s      Any Whitespace
\S      Any Non-whitespace character
^…$     Starts and ends
(…)     Capture Group
(a(bc)) Capture Sub-group
(.*)    Capture all
(ab|cd) Matches ab or cd

我们使用双\,因为这是特殊符号,|不是

答案 1 :(得分:0)

如果您希望输出为字符串,Float.parseFloat(s);对您的问题毫无用处。你的数组是浮点数吗?

因为如果是,你不应该得到任何输出而是NumberFormatException,因为字符串“m”不能被解析成浮点数。

此外,要解决单个值的问题,您可以使用构造数字的StringBuilder并忽略字母和逗号。应该特别使用这些字母。

最后,如果不是绝对必要,请使用double而不是float。它更加安全,可以帮助您解决程序中的一些问题!