2017-06-19 107 views
1

我有一个字符串,它看起来像这样:扫描信件和彩车使用java扫描器

“M 535.71429,742.3622 55.71428,157.14286Ç0,0 165.71429,-117.14286 -55.71428,-157.14286 Z”

我想让java扫描仪输出以下字符串:“m”,“535.71429”,“742.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”,...

+0

什么是point [0],point [1]?这是你试图存储输出的地方吗? – ganeshvjy

+0

是的,我想保存浮点值。 –

回答

4

我认为麻烦与/ /。你必须使用这种模式:

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 

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

+0

非常感谢! |之间有什么区别?和||? –

+1

@MoritzBurgi如果有帮助,请接受答案 –

+0

'||'在正则表达式中没有特殊含义。我认为正则表达式'(a || b)'寻找一个'a','b'和一个空格字符串(第一个'|'和第二个'|'之间的空格)。 [regex101](https://regex101.com/)用以下消息发出警告:*“在此位置的交流发电机有效地截断了该组,使得此点以外的任何其他标记都无用”*。 –

0

如果您所要的输出是字符串,Float.parseFloat(s);对您的问题没有用处。你的数组是浮点数组吗?

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

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

最后,如果不是绝对必要,请使用double而不是float。它非常安全,并且可以将您从一些更多的问题中解救出来!

+0

我想解析一个SVG文件。我alternetly搜索一个字母,然后保存后面的浮点值。我想我需要建立一个检查,如果解析令牌是由字母或数字组成。 –