[英]Java string split() Regex
我有這樣的字符串,
["[number][name]statement_1.","[number][name]statement_1."]
我只想獲取statement_1
和statement_2
。 我曾經嘗試過這種方式
String[] statement = message.trim().split("\\s*,\\s*");
但它給出["[number][name]statement_1."
和"[number][name]statement_2."]
。 我如何僅獲取statement_1
和statement_2
?
全部匹配而不是拆分
拆分和匹配全部是同一枚硬幣的兩個面。 在這種情況下,“全部匹配”會更容易。
您可以使用此正則表達式:
(?<=\])[^\[\]"]+(?=\.)
在正則表達式演示中查看匹配項。
在Java代碼中:
Pattern regex = Pattern.compile("(?<=\\])[^\\[\\]\"]+(?=\\.)");
Matcher regexMatcher = regex.matcher(yourString);
while (regexMatcher.find()) {
// the match: regexMatcher.group()
}
在回答您的問題以分別獲得兩個匹配項時:
Pattern regex = Pattern.compile("(?<=\\])[^\\[\\]\"]+(?=\\.)");
Matcher regexMatcher = regex.matcher(yourString);
if (regexMatcher.find()) {
String theFirstMatch: regexMatcher.group()
}
if (regexMatcher.find()) {
String theSecondMatch: regexMatcher.group()
}
說明
(?<=\\])
斷言當前位置之前是[ ]
[^\\[\\]"]+
匹配一個或多個不是[
, ]
或"
(?=\\.)
斷言下一個字符是一個點 參考
我不知道那不是您的實際字符串,但是您可以嘗試以下操作。
String s = "[\"[number][name]statement_1.\",\"[number][name]statement_2.\"]";
String[] parts = s.replaceAll("\\[.*?\\]", "").split("\\W+");
System.out.println(parts[0]); //=> "statement_1"
System.out.println(parts[1]); //=> "statement_2"
字符串是例如[50] [James] Loves cake?
Scanner scan = new Scanner(System.in);
System.out.println ("Enter string");
String s = scan.nextLine();
int last = s.lastIndexOf("]")+1;
String x = s.substring(last, s.length());
System.out.println (x);
Enter string
[21][joe]loves cake
loves cake
流程完成。
改用正則表達式。
使用Java 7
final Pattern pattern = Pattern.compile("(^.*\\])(.+)?");
final String[] strings = { "[number][name]statement_1.", "[number][name]statement_2." };
final List<String> results = new ArrayList<String>();
for (final String string : strings) {
final Matcher matcher = pattern.matcher(string);
if (matcher.matches()) {
results.add(matcher.group(2));
}
}
System.out.println(results);
使用Java 8
final Pattern pattern = Pattern.compile("(^.*\\])(.+)?");
final String[] strings = { "[number][name]statement_1.", "[number][name]statement_2." };
final List<String> results = Arrays.stream(strings)
.map(pattern::matcher)
.filter(Matcher::matches)
.map(matcher -> matcher.group(2))
.collect(Collectors.toList());
System.out.println(results);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.