Java 带空白的分裂函数问题

Java 带空白的分裂函数问题,java,split,Java,Split,我想用特殊字符分隔字符串,例如: String s = ",?hello=glu()Stop/<><$#!gluglufazoperu"; 我有一个问题,当我使用split时,它会在字符串数组的开头添加空格,有人知道如何删除它吗 下面是我的代码示例: public class Main { public static void main(String[] args) { String s = ",?hello=glu()Stop/<><

我想用特殊字符分隔字符串,例如:

String s = ",?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++;
        }
    }
}
公共类主{
公共静态void main(字符串[]args){

String s=“,?hello=glu()Stop/有一个空格,因为在“,”和“?”之间的第一次拆分返回一个空字符串“”。 使用while循环打印System.out.println(“”),这是一个空行

如果只想打印非空字符串,则应将System.out.println替换为

if(!"".equals(f[i])){
System.out.println(f[i]);
}
(除了你的问题)还有一个小提示,请看一下本教程


不是空白,而是空字符串,因为“,?”也是分隔符。这也可能发生在结尾

您可以简单地跳过一个空字符串。 您可以从阵列中删除这些内容,因为这样做会产生副本,成本很高

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);

您可以先用一个空格替换特殊字符,修剪结果,然后拆分。但是您仍然需要处理空字符串的角大小写。您的代码在my End上运行良好。您的代码在此处也运行良好。您可以删除返回数组的第一个和最后一个元素,或者仅使用if语句检查是否为white space然后不打印…
!“”。equals(f[i])
可以替换为correct!tnx作为加法。我更喜欢“.equals”,因为那样你就不能得到空指针,但这只是一个味道问题。它可以工作,但你能告诉我”“是什么意思吗?你在比较什么?”“表示空字符串。
final String regex = "[^\\w \\s]+";
String f[] = s.replaceAll("^"+regex, "")
              .split(regex);