Как проверить Character на то, что это знак препинания

Как проверить на то что char является знаком препинания в java?


Ответы (4 шт):

Автор решения: geo
import java.util.regex.*;

class Punct{

    static Pattern p = Pattern.compile("\\p{Punct}"); //template

    public static boolean punct(char ch){
        Matcher m = p.matcher(Character.toString(ch)); //String char punctuation
        return m.find();
    }
}

public class task1610753 {
    public static void main(String[] args){
        System.out.println(Punct.punct(','));
        System.out.println(Punct.punct('.'));
        System.out.println(Punct.punct('a'));
    }
}
→ Ссылка
Автор решения: Qwertiy

tio.run

public class Main {
  public static boolean isPunctuation(char c) {
    int t = Character.getType(c);

    return t == Character.CONNECTOR_PUNCTUATION
        || t == Character.DASH_PUNCTUATION
        || t == Character.END_PUNCTUATION
        || t == Character.FINAL_QUOTE_PUNCTUATION
        || t == Character.INITIAL_QUOTE_PUNCTUATION
        || t == Character.OTHER_PUNCTUATION
        || t == Character.START_PUNCTUATION;
  }

  public static void main(String[] args) {
    String s = "Hello, World!";

    for (int q=0; q<s.length(); ++q) {
      char c = s.charAt(q);

      if (isPunctuation(c)) {
        System.out.print(c);
      }
    }
  }
}
→ Ссылка
Автор решения: Pak Uula

Я очень извиняюсь за дурацкий вопрос, но что вы называете "знаком препинания"?

Если посмотреть стандарт Юникода, то там разных категорий PUNTUATION семь штук:

  • Pc Connector Punctuation
  • Pd Dash Punctuation
  • Ps Open Punctuation
  • Pe Close Punctuation
  • Pi Initial Punctuation
  • Pf Final Punctuation
  • Po Other Punctuation

Метод Character.getType(char) возвращает цифровой код категории, к которой относится символ. Вот небольшой пример, который печатает, к какой категории пунктуации относится символ.

import java.util.Map;

class Main {
    static final Map<Byte,String> unicodePunctuationClassName = Map.of(
        Character.DASH_PUNCTUATION, "DASH_PUNCTUATION",
        Character.START_PUNCTUATION, "START_PUNCTUATION",
        Character.END_PUNCTUATION, "END_PUNCTUATION",
        Character.CONNECTOR_PUNCTUATION, "CONNECTOR_PUNCTUATION",
        Character.OTHER_PUNCTUATION, "OTHER_PUNCTUATION",
        Character.INITIAL_QUOTE_PUNCTUATION, "INITIAL_QUOTE_PUNCTUATION",
        Character.FINAL_QUOTE_PUNCTUATION, "FINAL_QUOTE_PUNCTUATION"
    );

    static boolean IsUnicodePunctuation(char c) {
        byte cls = (byte) Character.getType(c);
        return unicodePunctuationClassName.containsKey(cls);
    }

    public static void main(String[] args) {
        String s = "aБ,./`!?-—«»‼⁉";

        for (var c : s.toCharArray()) {
            byte cls = (byte) Character.getType(c);
            if (unicodePunctuationClassName.containsKey(cls)) {

                System.out.print(c + " - " + unicodePunctuationClassName.get(cls));
            } else {
                System.out.print(c + " - " + cls);
            }
            System.out.println(" (isUnicodePunctuation: " + IsUnicodePunctuation(c) + ")");
        }

    }
}

Результат

a - 2 (isUnicodePunctuation: false)
Б - 1 (isUnicodePunctuation: false)
, - OTHER_PUNCTUATION (isUnicodePunctuation: true)
. - OTHER_PUNCTUATION (isUnicodePunctuation: true)
/ - OTHER_PUNCTUATION (isUnicodePunctuation: true)
` - 27 (isUnicodePunctuation: false)
! - OTHER_PUNCTUATION (isUnicodePunctuation: true)
? - OTHER_PUNCTUATION (isUnicodePunctuation: true)
- - DASH_PUNCTUATION (isUnicodePunctuation: true)
— - DASH_PUNCTUATION (isUnicodePunctuation: true)
« - INITIAL_QUOTE_PUNCTUATION (isUnicodePunctuation: true)
» - FINAL_QUOTE_PUNCTUATION (isUnicodePunctuation: true)
‼ - OTHER_PUNCTUATION (isUnicodePunctuation: true)
⁉ - OTHER_PUNCTUATION (isUnicodePunctuation: true)

Вам подходит?

Кстати, регулярное выражение \\p{IsPunctuation} из других ответов устроено точно так же - символ соответствует этому выражению, если он относится к одной из этих семи категорий.

→ Ссылка
Автор решения: вячесlove
public static boolean isPrepin(char ch) {
    String PREPIN = ",./;"; // знаки препинания
    return PREPIN.indexOf(ch) != -1;
}
→ Ссылка