在Java中删除字符串的最后一部分

4

我的代码:

String Y = "part1 part2 part3", X = "part1";

boolean foundMatch = false;
while(!foundMatch) {
    foundMatch = Y.equals(X);
    if(foundMatch) {
        break;
    }
    else {
        Y = useSplitToRemoveLastPart(Y);
        if(Y.equals("")) {
            break;
        }
    }

useSplitToRemoveLastPart() 的实现

private static String useSplitToRemoveLastPart(String y) {
    // What goes here?
    // It should chop the last part of the String...
}

有人能帮忙吗...


3
你能否定义一下什么是“字符串的最后部分”? - Ingo
2
给出一个具体的例子,说明输入和输出。 - David Weiser
6个回答

31
如果您想要删除part3,并且假设所有单词都是以空格分隔的。
String str ="part1 part2 part3";

String result = str.substring(0,str.lastIndexOf(" "));

1
这些说明隐含要求使用split(),而此解决方案则不需要。我不会给它打反对票,因为我觉得这种方法更好(适用于真实世界),但它不符合该方法名称所设定的要求。 - corsiKa
2
它可能不能回答楼主的问题,但这正是我和其他10个人正在寻找的答案。谢谢 :) - modulitos

3
如果您真的想使用split:

如果您真的想使用split:

private static String useSplitToRemoveLastPart(String str) {
    String[] arr = str.split(" ");
    String result = "";
    if (arr.length > 0) {
        result = str.substring(0, str.lastIndexOf(" " + arr[arr.length-1]));
    }
    return result;

}

1
public String removeLastSubstring(String target, String toRemove){
    int idx = target.lastIndexOf(toRemove);
    target = target.substring(0, idx) + target.substring(idx + toRemove.length());
    return target;
}

你只需要传入目标字符串和你想要删除的最后一个子字符串,例如:
String s = "123 #abc# 456";
s = removeLastSubstring(s, "#abc#");

1

你的整个代码可以优化为:

boolean foundmatch = y.startsWith(x);
y = foundmatch? x : "";

0
如果你想使用split来实现,那么可以这样做:
String s[] = Y.split(" ");
String n = "";
for (int i = 0; i < s.length - 1; i++)
        n+= s[i];
return n;

2
我想为解决OP的问题而+1,但我也想为在循环中鼓励使用string += otherString而-1。 - corsiKa
1
也许我生活在另一个世界,但是你如何连接字符串? - MByD
StringBuilder sb = new StringBuilder(); for(...) { sb.append(s[i]); } return sb.toString(); - corsiKa

0
顺便提一下,如果你需要构建的方法叫做useSplitToRemoveLastPart(String t),那么我建议你使用分割来删除最后一部分。
在这里查看

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接