2016-01-24 36 views
1

我有一個接受字符串並將其存儲在字符串數組中的程序。在這之前,它將字符串除以空格並將其存儲到數組的索引中。除了符合特定字符的空格之外,用空格分隔字符串

但是,如果字符(如引號)存在,我希望字符串不會被空格分隔。只要字符串在引號內,即使它裏面有空格,也應該將整個子字符串存儲在數組中的一個字符串中。爲了使它更清楚,這裏是它解析命令:

AddGame 1001 "Mirror's Edge" 

其中第一部分是用作開關case語句我有一個開關命令。第二個是遊戲ID,第三個是遊戲的名稱。到目前爲止,當我讓遊戲類,並把它打印出來,它返回:

(1001, "Mirror's) 

雖然它應該是:

(1001, Mirror's Edge) 

我真的不希望儘可能地使用正則表達式。任何人都可以將我指向正確的方向嗎?

+0

爲什麼不只是限制你的分裂到2最大?這樣你的結果數組將包含最多3個元素。那是你要的嗎? –

+0

https://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html – pvg

+0

@LukePark還有一些命令可以包含5個部分。有多個命令,這些命令將決定大小寫。 –

回答

-1

當你把它存放在陣列中使用GET線像=新的掃描儀(System.in)這個

掃描儀很簡單;

String s = in.nextLine();

+0

這不是OP想要的。 –

+0

這就是我正在做的,但是,我正在使用.split()的空格子字符串。但是,如果它是在引號中,我想將它作爲整個字符串存儲,而不是用空格分隔。例如,AddPlayer 1001「Jane Doe」應該根據我的打印函數的工作原理返回(1001,Jane Doe),然而,它返回(1001,「簡) –

+0

@EricRangil你看看StreamTokenizer嗎?它很老很笨重,但是它處理引號,並且或多或少地完全符合你的要求。 – pvg

1

「易」 的方式:

String[] array = str.split("\"?, *\"?(?=(([^\"]*\"){2})*[^\"]*$"); 

「硬」 的方式(僞代碼):

  • 由字符
  • 您的工作方式沿輸入字符數的報價數量遇到
  • 如果數量很奇怪,請勿將逗號當作中斷點
  • 忽略此目的引號收集零件
  • 忽略任何數量的空格打破逗號後

正則表達式版本號第做了這一切。

儘管正則表達式看起來很「硬」,但手動執行此操作花費的時間和調試量使得非正則表達式的方式變得「很難」。

相關問題