使用 substring 删除 Java 中的部分字符串

Use substring to delete part of string in Java

在我的作业中,禁止使用集合和任何数组。我们可以使用 String Tokenizer,但不允许使用除 String 和 System 之外的任何其他 类。此解决方案必须适用于任意数量的条目。

我有一个字符串,如下所示:

1|Aaron|Peter|3063543030|john@gmail.com + "\n" 
2|Buffet|Anthony|3063543030|john@gmail.com + "\n" 
3|Dunty|Richard|3063543030|john@gmail.com 

我有这个小方法可以到达下一个字符串索引:

 public static int nextIndex(int index, String carnet) {
        return carnet.indexOf("\n", index) +1;
        }

我有这个方法,我使用子字符串方法删除字符串中的子字符串:

public static String deleteContactFromString (String idContact, String myString) {

        String stringModified = "";
        String myStringModified = "";

        String id = idContact.trim();

        if(!myString.isEmpty()) {

            int start = myString.indexOf(id + "|");

            if (start >= 0) {
            //Here I call the nextIndex method to get next string index
                int end = nextIndex(start, myString);
                
                stringModified = carnet.substring(0, start) + carnet.substring(end);
                myStringModified = stringModified;
                System.out.println("string modified " + myStringModified);
            } else {
                System.out.println("This contact doesnt exist");
                myStringModified = myString;
            }
        }

               return myStringModified;
    }

我遇到的问题是,当 myString 中只有一个联系人时,我无法删除该索引,因为没有下一个索引。当我尝试删除字符串的最后一个索引时发生同样的问题。

如果 myString 是这样的并且只有一个联系人:

1|Aaron|Peter|3063543030|john@gmail.com + "\n" 

我无法删除该索引。

如果 myString 有更多联系人,我尝试删除最后一个索引,我会遇到同样的问题:

1|Aaron|Peter|3063543030|john@gmail.com + "\n" 
2|Buffet|Anthony|3063543030|john@gmail.com + "\n" 
3|Dunty|Richard|3063543030|john@gmail.com <-- Can't be deleted

如果有人能帮我解决这个问题,我将不胜感激。

谢谢

您的 nextIndex 方法在最后一条记录中被破坏:从您的示例中可以清楚地看出,最后一条记录甚至可能不会以 \n 结尾。首先,您需要仔细考虑您的协议:这是什么意思:

1|Aaron|Peter|3063543030|john@gmail.com + "\n" 
2|Buffet|Anthony|3063543030|john@gmail.com + "\n" 

到此结束。那有效吗?应该删除最后的换行符吗?这是 2 条记录还是 3 条记录?

然后,想想这个:

1|Aaron|Peter|3063543030|john@gmail.com + "\n" 
2|Buffet|Anthony|3063543030|john@gmail.com

根据您的示例,意图显然是上述内容有效并且是 2 条记录列表。

如果您在第二种情况(最后一条记录没有换行符)的最后一条记录上,您的 nextIndex 代码将被破坏:indexOf 调用根本找不到换行符,因此计算结果为-1,然后向其添加 1,使其看起来像是下一条记录回到了开头。我认为这不是故意的。您需要在此处编写更多代码,并检查边缘情况:

如果没有换行符,那么'the next location'应该是string.length()。这然后方便地意味着 str.substring(that) 是空字符串。