2017-06-19 109 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搜索一個字母,然後保存後面的浮點值。我想我需要建立一個檢查,如果解析令牌是由字母或數字組成。 –