我有一个看起来像这样的字符串:
" 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",...
答案 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。它更加安全,可以帮助您解决程序中的一些问题!