Я пытаюсь разобрать строку с помощью регулярного выражения, строка имеет открывающие скобки и заканчивающиеся скобки, между ними перечислены маленькие английские sh буквы, разделенные запятой. После каждой запятой следует пробел. Вот так
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.io.*;
public class StringLetters {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] temp = br.readLine().split("\\s*(\\{|,|\\}|\\s)\\s*");
for (int i = 0; i < temp.length; i++) {
System.out.println("temp[" + i + "] ===>" + temp[i]);
}
Set<String> set = new HashSet<>();
for (String a : temp) {
set.add(a);
}
System.out.println(set.size());
} catch (IOException ioe) {
}
}
}
И когда я передаю {a, b, c}, это как вход
$ java StringLetters
{a, b, c}
temp[0] ===>
temp[1] ===>a
temp[2] ===>b
temp[3] ===>c
4
Другие входы могут быть {}, {s, h, a, n , o, n, o}, {h, e, a, l, h, t} ... et c
Итак, когда я делаю
$ java StringLetters
{}
0
, правильно, для пустой строки я должен получить это 0.
Пустая строка в 0-м месте временного массива - это не то, что я хочу, чтобы избавиться от этого, я использую \ s внутри '(\ {|, | \} | \ s) ', но это мне здесь не помогает !!