/ / Розбиття рядка з періодом (.) Показує різні поведінки [дублікат] - java, string

Стрічка розділити з періодом (.) Показує різну поведінку [duplicate] - java, string

Я працював над String і спробував з split() за . люблю:-

String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split(".")));

Вищевказаний код виводить [] порожній масив. Але якщо я втечу . подібно до :-

String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split("\.")));

Це дає правильний вихід як [Hi, Hello].

Тому я хочу знати: -

Чому мені потрібно бігти . але . зазвичай це не вважається символом втечі String як ми можемо використовувати . безпосередньо

Відповіді:

14 за відповідь № 1

The String.split( String ) метод приймає регулярний вираз як аргумент. У регулярному виразі "." означає "будь-який символ", тому вам доведеться уникати його (додавши "\"), якщо ви насправді хочете розділити на ". а не "будь-яким персонажем".

Дивіться документацію api від Візерунок для початку для регулярних виразів.


4 для відповіді № 2

Ви не можете розділити його просто . тому що split ()

Splits this string around matches of the given regular expression.

У регексе. означає "відповідати будь-якому символу", тому вам доведеться уникати його з \ замість того, що ви також повинні уникати символу!


1 для відповіді № 3

Невелике доповнення до попередніх відповідей (які є правильними).

Часто краще використовувати StringUtils.split від Apache Commons Lang (javadoc). В якості аргументу він бере звичайну рядок (замість регулярного вираження). Також її поведінка більш інтуїтивно зрозуміла:

StringUtils.split("a..b.c", ".") = ["a", "b", "c"]

проти

"a..b.c".split("\.") = ["a", "", "b", "c"]