簡體   English   中英

Java字符串split()正則表達式

[英]Java string split() Regex

我有這樣的字符串,

["[number][name]statement_1.","[number][name]statement_1."]

我只想獲取statement_1statement_2 我曾經嘗試過這種方式

String[] statement = message.trim().split("\\s*,\\s*");

但它給出["[number][name]statement_1." "[number][name]statement_2."] 我如何僅獲取statement_1statement_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.

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