在Java中使用正则表达式匹配?

时间:2015-05-09 21:08:59

标签: java regex

我希望在文本字符串中找到整个单词。字符串中的单词由空格和新行分隔,因此我使用这两个字符来查找每个单词的开头和结尾。当模式为“\ s”或“\ n”时,程序正确地找到索引,而在匹配两个字符时则不能。我该如何修复这个程序?

import java.util.*;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class convertText{

    public static String findText(String text){

        String r = text.trim();

        // System.out.println(r);

        Pattern pattern = Pattern.compile("\\s+ | \\n");

        Matcher matcher = pattern.matcher(text);

    while (matcher.find()) {
        // System.out.println(matcher.start());
        System.out.println(text.substring(matcher.start()+1));
    }

        return text;
    }

    public static void main(String[] args) {
        // String test = " hi \n ok this. "; 
        String test = " hi ok this. "; 
        // System.out.println(test.substring(7));
        // System.out.println(test);
        findText(test);
    }


}

4 个答案:

答案 0 :(得分:0)

您可以使用[^\\s]+搜索任何不是换行符或空格(也称为单词)的字符并打印这些组:

Pattern pattern = Pattern.compile("[^\\s]+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}

[^\\s]+可以细分为:

  • \\s匹配任何空白字符,包括常规空格和换行符(因此我们不需要单独指定\\n
  • []定义了character set。这将匹配括号内的任何字符
  • ^表示" not",因为字符集中的第一个字符会反转匹配,并且只匹配集合中的字符而不是(除了空格和换行符之外的任何字符)在这种情况下)。
  • +匹配前一个标记中的一个或多个,在这种情况下,前一个标记是匹配非空白字符的字符表达式

答案 1 :(得分:0)

您可以使用java 8 Stream API执行此操作

JUST SET TO SharedPreferences  

输出:

String test = " hi ok this. ";
Pattern.compile("\\W+").splitAsStream(test.trim())
            .forEach(System.out::println);

答案 2 :(得分:0)

如果要匹配文本字符串中的所有单词,可以使用:

r* java转义:(?i)[a-z]+

"(?i)[a-z]+" ...打开不区分大小写的匹配 (?i) ...尽可能多地匹配来自a-z的任何字母。

或者您可以使用:

[a-z]+ ...匹配\w+ASCII letterdigit。尽可能多次。

underscore

\ s与单个空格不匹配(仅限)。它与 try { String subjectString = " hi ok this. "; Pattern regex = Pattern.compile("(?i)[a-z]+", Pattern.MULTILINE); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { String word = regexMatcher.group(); int start_pos = regexMatcher.start(); int end_pos = regexMatcher.end(); JOptionPane.showMessageDialog(null, ""+word+ " found from pos: "+start_pos+" to "+end_pos); } } catch (PatternSyntaxException ex) { } ASCII spacetabline feedcarriage returnvertical tab相匹配。所以你只需要\ s +来匹配所有类型的空格字符。

答案 3 :(得分:0)

只需用空白字符集分割字符串:

String[] words = yourString.split("\\s+");