簡體   English   中英

按空格分割字符串,Java

[英]Split string by space, Java

這是一個字符串:

String s = "119 days 6 hours 13 minutes 24 seconds";

如何進行拆分以獲得這樣的數組:

{
  "119 days",
  "6 hours",
  "13 minutes",
  "24 seconds"
}

我不知道該怎么做。

我尋找了String.split()並嘗試了[az]\\s regExp,但是它剪切了最后一個字符

針對這種特定情況的一種方法是使用負向后查找來拆分。

import java.util.Arrays;

class rTest {
  public static void main (String[] args) {
    String s = "119 days 6 hours 13 minutes 24 seconds";
    String[] parts = s.split("(?<![^a-zA-Z])\\s");
    System.out.println(Arrays.toString(parts));
  }
}

正則表達式:

(?<!           look behind to see if there is not:
 [^a-zA-Z]     any character except: 'a' to 'z', 'A' to 'Z'
)              end of look-behind
\s             whitespace (\n, \r, \t, \f, and " ")

烏普特

[119 days, 6 hours, 13 minutes, 24 seconds]

您所走的路是正確的,但是您需要使用零寬度匹配器組,以免它們被吞下,因此類似:

input.split(" (?=[0-9])");

您可以分割每個后面有數字的空格。 為此,您可以使用前瞻機制
(?=nextElement)因為split使用正則表達式。 要表示正則表達式中的任何空格,可以使用"\\\\s"並表示任何數字"\\\\d"

有兩種解決方案,首先,您可以使用
s.split(" "); 但是,這將返回每個單詞並簡化所有空格。
因此,這兩個解決方案是按空格分隔並遍歷數組,並將每個兩個單詞加一個中間的空格。
或者,您可以更改輸入字符串,以便拆分除空格以外的其他內容(例如逗號)(盡管這還涉及將字符串的來源修改為新格式):

String s = "119 days, 6 hours, 13 minutes, 24 seconds";
String[] parts = s.split(", ");

您可以使用零寬度環顧四周的split ,但是我更喜歡在合理的情況下避免環顧四周。 使用Matcher使過程代碼更加冗長,但是它具有使正則表達式更易於理解的附加優點。 由於大多數程序員比正則表達式更了解過程語言,因此有時會導致代碼更具可維護性。

String s = "119 days 6 hours 13 minutes 24 seconds";
Pattern regex = Pattern.compile("\\w+ \\w+"); // match two words
Matcher matcher = regex.matcher(s);
ArrayList<String> list = new ArrayList<String>();
while (matcher.find()) {
    list.add(matcher.group());
}
System.out.println("list=" + list);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM