Я хочу выделить строку со специальными символами, например:
String s = ",?hello=glu()Stop/<><$#!gluglufazoperu";
Я использую функцию split для получения нормальных символов:
hello
glu
Stop
gluglufazoperu
У меня проблема, когда я использую split, который помещает пробел в начало массива строк, кто-нибудь знает, как его удалить?
Вот мой пример кода:
public class Main {
public static void main(String[] args) {
String s = ",?hello=glu()Stop/<><$#!gluglufazoperu";
String f[] = s.split("[^\\w \\s]+");
int i= 0;
while(i < f.length){
System.out.println(f[i]);
i++;
}
}
}
Это результат: (пробел) hello glu Stop gluglufazoperu
есть пробел, потому что первое разделение между ',' и '?' возвращает пустую строку "". С циклом while вы печатаете System.out.println(""), и это пустая строка.
Когда вы хотите распечатать непустые строки, вы должны заменить System.out.println на
if(!"".equals(f[i])){
System.out.println(f[i]);
}
И (рядом с вашим вопросом) небольшой совет, взгляните на этот учебник.
!"".equals(f[i])
можно заменить на !f[i].isEmpty()
Не пустое, а пустая строка как ",?" также является разделителем. Это может произойти и в конце.
Вы можете просто пропустить пустую строку. Вы можете удалить те из массива, что дорого, поскольку оно делает копию.
if (f.length > 1) {
if (f[0].isEnpty()) {
f = Arrays.copyOfRange(f, 1, f.length);
}
if (f.length > 1) {
if (f[f.length - 1].isEnpty()) {
f = Arrays.copyOfRange(f, 0, f.length - 1);
}
}
}
Примечания:
String[] f =...
более обычна в java.\\s
уже фиксирует пространство, и вы действительно хотите сохранить пробелы?Вы можете просто заменить самый длинный префикс строки, соответствующей вашему регулярному выражению, пустой строкой перед расщеплением:
final String regex = "[^\\w \\s]+";
String f[] = s.replaceAll("^"+regex, "")
.split(regex);