java - 为什么我的 Java split 方法导致打印空行?

标签 java split string println

我正在做学校的一项短期作业,由于某种原因,两个相邻的分隔符导致打印空行。如果它们之间有空间但没有,我会理解这一点。我错过了一些简单的东西吗?我希望每个标记一次打印一行而不打印 ~.

public class SplitExample
{
    public static void main(String[] args)
    {
        String asuURL = "www.public.asu.edu/~JohnSmith/CSE205";
        String[] words = new String[6];
        words = asuURL.split("[./~]");
        for(int i = 0; i < words.length; i++)
        {
            System.out.println(words[i]);
        }
    }
}//end SplitExample

编辑:下面需要的输出

www
public
asu
edu
JohnSmith
CSE205

最佳答案

I would understand this if there was a space between them but there isn't

是的,它们之间没有空格,但它们之间有一个空字符串。事实上,每对字符之间都有空字符串。

这就是为什么当您的分隔符彼此相邻时,拆分将在它们之间得到空字符串。

I would like each token to print one line at a time without printing the ~.

那你为什么在分隔符中包含 / 呢? [./~]表示匹配.,或者/,或者~。拆分它们也不会打印 /。 如果您只想在 ~. 上拆分,则只需在字符类中使用它们 - [.~]。但同样,您并不清楚您到底想要什么输出。也许您可以发布当前输入的预期输出。


似乎您在 .//~ 上 split 。在这种情况下,您不能在此处使用字符类。您可以使用此模式拆分:-

String[] words = asuURL.split("[.]|/~?");

这将拆分为:- ./~/(因为 ~ 是可选的)

关于java - 为什么我的 Java split 方法导致打印空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677223/

相关文章:

java - 如何分割下面的字符串

vim - 从命令行设置 Vim 窗口大小和选择

php - 对字符串文字的所有引用都引用同一个实例吗?

c++ - std::string 获取 (char *) 而不是 (const char *)

java - String.replaceAll 比自己完成工作要慢得多

java - 调用 get 方法时来自 java.util.Hashtable 的 AbstractMethodError

java - 为父类的可见属性生成委托(delegate)方法

java - 调用 super.paintComponent() 重要吗?

java - 如何让 JXPath 干净地设置列表/集合条目

java - 当分割字符恰好出现两次时分割字符串