代码之家  ›  专栏  ›  技术社区  ›  Shekhar

在字符串Java中找到完整的单词

  •  1
  • Shekhar  · 技术社区  · 16 年前

    我正在写一段代码,其中我只需要找到完整的单词,例如

    String str = "today is tuesday";
    

    我在找“T”,然后我就找不到任何单词了。

    有人能告诉我如何用Java编写这样的程序吗?

    9 回复  |  直到 13 年前
        1
  •  7
  •   Steven Chong    16 年前

    我使用regexp来完成这些任务。你的情况应该是这样的:

    String str = "today is tuesday";
    return str.matches(".*?\\bt\\b.*?"); // returns "false"
    
    String str = "today is t uesday";
    return str.matches(".*?\\bt\\b.*?"); // returns "true"
    

    简短的解释:

    . 匹配任何字符,*?是为了 零次或多次 \b是一个 词边界 .

    可以找到有关regexp的更多信息 here 或者专门用于Java here

        2
  •  5
  •   polygenelubricants    16 年前
        String sentence = "Today is Tuesday";
        Set<String> words = new HashSet<String>(
            Arrays.asList(sentence.split(" "))
        );
        System.out.println(words.contains("Tue")); // prints "false"
        System.out.println(words.contains("Tuesday")); // prints "true"
    

    各 contains(word) 查询是 O(1) ,因此,除了实现自己复杂的字典数据结构之外,如果要在文本中查找多个单词,这是最快最实用的解决方案。

    这种用途 String.split 把单词和句子分开 " " 定界符。根据问题的定义,其他可能的变化是 \b ,单词边界锚。如果你必须考虑到自然语言的每一个语法特征(如 "can't" 被分割 \b 进入之内 "can" 和 "t" )

    使用传统的case规范化技巧split和hash可以很容易地引入case不敏感。 sentence.toLowerCase() 相反,看看是不是 contains(word.toLowerCase()) .

    也见

        3
  •  3
  •   ryanprayogo    16 年前
    String[] tokens = str.split(" ");
    
    for(String s: tokens) {
        if ("t".equals(s)) {
            // t exists
            break;
        }
    }
    
        4
  •  2
  •   Bozho    16 年前
    String[] words = str.split(" ");
    Arrays.sort(words);
    Arrays.binarySearch(words, searchedFor);
    
        5
  •  1
  •   thelost    16 年前
    String str = "today is tuesday";
    
    StringTokenizer stringTokenizer = new StringTokenizer(str);
    
    bool exists = false;
    
    while (stringTokenizer.hasMoreTokens()) {
        if (stringTokenizer.nextToken().equals("t")) {
            exists = true;
            break;
        }
    }
    
        6
  •  1
  •   james    16 年前

    使用类似“\bt\b”的正则表达式。

        7
  •  0
  •   GuruKulki    16 年前

    您可以通过放置一个以空格结尾的正则表达式来完成此操作。

        8
  •  0
  •   private_meta    16 年前

    我建议你使用 "split" 以空格作为分隔符的字符串的功能,然后逐个查看这些元素并进行直接比较。

        9
  •  0
  •   Ajay Narang    13 年前

    我建议使用这个regex pattern1=。 \BT\B. ”而不是模式2=“。 ?bt。 “.pattern1将帮助您匹配完整的字符串,如果该字符串中出现“t”,而不是pattern2,后者只到达您正在搜索的字符串“t”,并忽略字符串的其余部分。两种方法没有太大区别,对于您返回true/false的特定用例,这两种方法都可以运行良好。我建议的那个将帮助您即兴编写regex,以防您在用例中做进一步的更改。