【问题标题】:Check if string is a punctuation character检查字符串是否为标点符号
【发布时间】:2012-12-18 02:30:54
【问题描述】:

假设我有一个包含一些字母和标点符号的字符串数组

String letter[] = {"a","b","c",".","a"};

在字母[3]中我们有“。”

如何检查字符串是否为标点符号? 我们知道有很多可能的标点符号(,.?! 等)

我目前的进展:

for (int a = 0; a < letter.length; a++) {
    if (letter[a].equals(".")) { //===>> i'm confused in this line
        System.out.println ("it's punctuation");
    } else {
        System.out.println ("just letter");
    }
}

【问题讨论】:

  • 您可以为此目的使用正则表达式。它真的很方便。
  • @smit ,你能给我一个提示吗?
  • 这会给你一些想法:Punctuation Regex in Java
  • @sephtian 抱歉回复晚了。虽然如果你想使用它,我添加了答案。

标签: java string-comparison punctuation


【解决方案1】:

这是使用正则表达式的一种方法:

if (Pattern.matches("\\p{Punct}", str)) {
    ...
}

\p{Punct} 正则表达式是一个 POSIX 模式,表示单个标点符号

【讨论】:

    【解决方案2】:

    根据您的需要,您可以使用任何一种

    Pattern.matches("\\p{Punct}", str)
    

    Pattern.matches("\\p{IsPunctuation}", str)
    

    第一个模式匹配以下 32 个字符:!"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~

    第二个模式匹配多达 632 个 unicode 字符,例如:«»¿¡§

    有趣的是,并非所有与第一个模式匹配的 32 个字符都与第二个匹配。第二个模式匹配以下 9 个字符:$+&lt;=&gt;^`|、和~(第一个模式匹配)。

    如果你想匹配 either 字符集中的任何字符,你可以这样做:

    Pattern.matches("[\\p{Punct}\\p{IsPunctuation}]", str)
    

    【讨论】:

    • 这个例子中的 Pattern 来自哪里?我收到错误“VM718:1 Uncaught ReferenceError: Pattern is not defined”
    • @Parseltongue 这个答案适用于 Java,而不是 javascript
    【解决方案3】:

    除了.之外,你想检查更多的标点符号吗?

    如果是这样,您可以这样做。

    String punctuations = ".,:;";//add all the punctuation marks you want.
    ...
    if(punctuations.contains(letter[a]))
    

    【讨论】:

    • 此解决方案意味着您手动指定所有标点符号。 “标点符号”的定义绝对不完整。
    • 这还不够。有很多语言有不同的标点符号。这些甚至不包括拉丁字母。请改用 \p{P} 或 \p{Punctuation}
    【解决方案4】:

    试试这个方法:Character.isLetter()。如果字符是字母(a-z,大写或小写),则返回 true,如果字符是数字或符号,则返回 false。

    例如布尔答案 = Character.isLetter('!');

    答案将等于假。

    【讨论】:

    • 该解决方案的问题在于,当您检查特殊字符(如 % ^$ ..)时,您总是会得到错误,而且它们不是字母
    • @mebada 有什么问题?
    【解决方案5】:

    我尝试了正则表达式:“[\\p{Punct}]”或“[\\p{IsPunctuation}]”或没有[],它没有按预期工作。

    我的字符串是: How are you?,甚至是"How are you?", he asked.

    然后调用:my_string.matches(regex);,但它似乎只识别字符串是否只有一个标点符号(例如“?”、“.”、...)。

    只有这个正则表达式对我有用:“(.*)[\\p{P}](.*)”,它将包括标点符号的所有前面和后面的字符,因为matches() 需要匹配所有句子。

    【讨论】:

      【解决方案6】:

      导入字符串 ... if(string.punctuation.contains(字母[a]))

      【讨论】:

        【解决方案7】:

        function has_punctuation(str) {
        
          var p_found = false;
          var punctuations = '`~!@#$%^&*()_+{}|:"<>?-=[]\;\'.\/,';
          $.each(punctuations.split(''), function(i, p) {
            if (str.indexOf(p) != -1) p_found = true;
          });
        
          return p_found;
        
        }

        【讨论】:

        • 这个问题问的是java,而不是javascript。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        相关资源
        最近更新 更多