Java - 如何在不使用数组的情况下显示字符串中的所有子字符串

Java - How to display all substrings in String without using an array

我有一个字符串是:

1|name|lastname|email|tel \n
2|name|lastname|email|tel \n

我知道我必须使用循环来显示所有行,但问题是在我的作业中
除了 String 和 System.

,我不能使用数组或其他 类

另外我想在不使用排序方法或数组的情况下按升序对名称进行排序。

我是否必须使用 compareTo 方法来比较两个名称?

如果是这样,我如何使用 compareTo 方法对名称进行排序。

例如,如果compareTo returns 1,则表示该名称大于另一个。在那种情况下,我如何管理 return 以在字符串中正确排序名称?

要像示例中那样显示字符串的所有子字符串,您可以一个一个地遍历所有字符并将它们存储在一个字符串中。每当您点击分隔符(例如 | 或 \n)时,打印最后一个字符串。

这是一个关于遍历 Java 中字符串字符的线程: What is the easiest/best/most correct way to iterate through the characters of a string in Java?

如果您还需要在没有数组的情况下按升序对名称进行排序,则需要多次扫描输入 - 对 N 个字符串进行排序至少需要 N*log(N) 步。如果这是一个数据结构问题,PriorityQueue 应该为您解决问题 - 插入所有子字符串,然后以排序的方式弹出它们:)

基于 StoneyKeys 之前的回答,由于我没有发表评论的特权,您可以使用一个简单的 if 语句,当 char 是定界符时,System.out.println() 您之前扫描的字符串。然后您可以将字符串重置为空字符串,为扫描下一个字符串做准备。

在 java 中,有用于字符串和字符的特殊 .equals() 运算符,因此当您不使用 == 来检查字符串或字符时。一定要调查一下。要重置字符串的值,只需为其分配一个新值即可。这是因为原始变量指向某个字符串,即“YHStan”,通过使其指向“”,我们实际上是在“重置”该字符串。即 scannedstr = "";

请阅读代码并理解每一行代码的作用。示例代码和注释仅供您理解,并非完整的解决方案。

String str ="";
    String value = "YH\nStan";
    
    for (int i=0; i <value.length(); i++) {
        char c = value.charAt(i);
        String strc = Character.toString(c);
        //check if its a delimiter, using a string or char .equals(), if it is print it out and reset the string
        if (strc.equals("\n")) {
            System.out.println(str);
            str ="";
            continue;  // go to next iteration (you can instead use a else if to replace this)
        }
        //if its not delimiter append to str
        str = str +strc;
        //this is to show you how the str is changing as we go through the loop.
        System.out.println(str);
            
    }
    System.out.println(str);     //print out final string result

结果为:

是 YH YH 小号 英石 斯塔 斯坦 斯坦