[英]Split Java String by space and not by double quotation (") that includes space
[英]Java string - split on space, but preserve double space
目前,我正在按空格分割字符串。 但是,當我將它們放回原處時,我想保留一些雙空格。 有關如何做到這一點的任何建議?
即字符串"I went to the beach. I ate pie"
被拆分為
I
went
to
the
beach.
I
ate
pie
我不需要空白條目,但我想將其放回相同的格式。 謝謝大家!
做一個字符串replaceAll(“”,“可能性不大的字符序列”),然后像平常一樣用空格分割您的字符串。 然后,您可以通過將{unlikelyCharacterSequence}末尾替換為“”來轉換回雙倍空格。
但是:如果您在未修改的實際String中遇到“不太可能”的字符序列,這將失敗。 對於更通用的解決方案,請檢查此示例下面列出的替代方法。
示例(警告,取決於!@#!@#的不存在:
String example = "Hello. That was a double space. That was a single space."
String formatted = example.replace(" ", " !@#!@#");
String [] split = formatted.split(" ");
for(int i = 0; i < split.length; i++)
{
split.replace("!@#!@#", " ");
}
// Recombine your splits?
或者,您可以采用更健壯的策略來重新組合字符串(如您在問題中所看到的那樣),但忽略僅包含單個空格的元素:
String example = "ThisShouldBeTwoElements. ButItIsNot.";
String [] splitString = example.split(" ");
String recombined = "";
for(int i = 0; i < splitString.length; i++)
{
if(!splitString[i].equals(" "))
recombined += splitString[i];
}
String st = "I went to the beach. I ate pie";
st.split("\\s{1}(?!\\s)");
這導致了
[I, went, to, the, beach. , I, ate, pie]
我還建議您查看http://docs.oracle.com/javase/6/docs/api/和/或http://www.regular-expressions.info/java.html,以便您了解這樣做的意思。
仔細看看Java的Regex能為您做什么。 有一種使用正則表達式來確認模式的方法。
嘗試此操作,它應刪除非空白字符之間的所有空白。
myString = myString.replaceAll("\S\s\S", "");
當空格在兩個單詞之間出現的次數多於一次時,它將保留空白。
我知道這是一個古老的問題,但是為了將來的讀者受益:您正在尋找的概念是“捕獲群體” 。 捕獲組允許您引用表達式中的匹配項,並在以后(例如,通過反向引用)檢索它們,而不是吞下字符串。
在文檔中,您需要了解以下相關語法:
(?<name>X) X, as a named-capturing group
(?:X) X, as a non-capturing group
(?idmsuxU-idmsuxU) Nothing, but turns match flags i d m s u x U on - off
(?idmsux-idmsux:X) X, as a non-capturing group with the given flags i d m s u x on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(?>X) X, as an independent, non-capturing group
使用輸入文本:
String example = "ABC DEF GHI J K";
您可以使用正向和負向超前組合將尾隨空格與每個單詞組合:
// Result: [ABC , DEF , GHI , J , K]
example.split("(?<=\\s+)(?!\\s)");
或者,您可以以正向前移捕獲單詞邊界,以將空格保留為單獨的分組元素:
// Result: [ABC, , DEF, , GHI, , J, , K]
example.split("(?=\\b)");
Java模式API:
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
邊注:雖然“替換一些完全令人難以置信的文字”的建議很誘人,因為它很容易, 永遠不要做,在生產代碼。 它最終將失敗,並且發生的頻率超出您的想象。 在程序員使用大約80列的“〜= $〜= $〜= $ ...”后,我調試了一個呼叫中心,認為這是安全的。 持續了幾個月,直到服務代表按此順序在他的筆記上保存了“花哨的邊框”。 我什至在搜索服務器上目睹了一次真正的隨機MD5沖突。 誠然,MD5碰撞歷時11年,但仍使搜索崩潰,並且問題依然存在。 唯一的字符串永遠不會。 始終假定將出現重復項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.