使用java扫描仪扫描字母和浮动

使用java扫描仪扫描字母和浮动,java,java.util.scanner,Java,Java.util.scanner,我有一个字符串,看起来像这样: m 535.71429742.3622 55.71428157.14286 c 0,0 165.71429,-117.14286-55.71428,-157.14286 z 我希望java扫描器输出以下字符串:m,535.71429742.3622,55.71428,157.14286,c 所以所有东西都用逗号或空格分隔,但我很难让它正常工作 我的代码是这样的: Scanner scanner = new Scanner(path_string); scanner

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

m 535.71429742.3622 55.71428157.14286 c 0,0 165.71429,-117.14286-55.71428,-157.14286 z

我希望java扫描器输出以下字符串:m,535.71429742.3622,55.71428,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、

我认为问题在于//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

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

我认为问题在于//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

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

如果您希望输出为字符串,Float.parseFloats;对你的问题没有用。你的数组是浮点数组吗

因为如果是,您不应该得到任何输出,而是NumberFormatException,因为字符串m不能解析为浮点

此外,为了解决单个值的问题,可以使用构造数字并忽略字母和逗号的。应特别使用字母


最后,如果不是绝对必要,请使用double而不是float。它是如此的安全,可能会使你的程序避免更多的问题

如果希望输出为字符串,则Float.parseFloats;对你的问题没有用。你的数组是浮点数组吗

因为如果是,您不应该得到任何输出,而是NumberFormatException,因为字符串m不能解析为浮点

此外,为了解决单个值的问题,可以使用构造数字并忽略字母和逗号的。应特别使用字母


最后,如果不是绝对必要,请使用double而不是float。它是如此的安全,可能会使你的程序避免更多的问题

点[0],点[1]是什么?这就是您试图存储输出的地方吗?是的,我想保存浮点值。点[0],点[1]是什么?这就是您试图存储输出的地方吗?是的,我想保存浮点值。非常感谢!|和| | |之间的区别是什么?@MoritzBurgi接受答案如果它对您有帮助,请接受它| |在正则表达式中没有特殊意义。我认为正则表达式a | | b寻找a、a b和emtpy字符串,即第一个|和第二个|之间的空隙。警告如下:此位置的交流发电机有效地截断组,使超出此点的任何其他令牌无效。非常感谢!|和| | |之间的区别是什么?@MoritzBurgi接受答案如果它对您有帮助,请接受它| |在正则表达式中没有特殊意义。我认为正则表达式a | | b寻找a、a b和emtpy字符串,即第一个|和第二个|之间的空隙。警告并显示以下消息:此位置的交流发电机有效地截断了组,使超出此点的任何其他标记都无效。我想解析SVG文件。我交替搜索一个字母,然后保存后面的浮点值。我想我需要检查解析的标记是否由字母或数字组成。我交替搜索一个字母,然后保存后面的浮点值。我想我需要建立一个检查,如果解析的令牌是由字母或数字组成的。