删除字符串部分后面的所有内容

61
我有一个由三部分组成的字符串。我想让字符串变成所需的单词(changes),一个分隔符(不变)和最后一部分(可变)。我想删除分隔符和最后一部分。分隔符是“ - ”,所以我想知道是否有一种方法可以删除字符串中某个部分之后的所有内容。
例如,如果我想将这个字符串:“Stack Overflow - A place to ask stuff” 变成这个字符串:“Stack Overflow”,那么该怎么办?感谢您的帮助!
10个回答

102
例如,您可以执行以下操作:

For example, you could do:

String result = input.split("-")[0];
或者
String result = input.substring(0, input.indexOf("-"));

(并添加相关的错误处理)


你知道如果主字符串是这样的:/name/nm1243456/lkbfwugbòwougs,我想要保留的只有nm123456吗?(我不能使用像input.substring(6, directorImdbId.length() - 15)这样的东西,因为字符串最后一部分的字符数在变化(它可能是16或17个字符)) - mOna

32
Apache Commons StringUtils提供了substringBefore方法。 StringUtils.substringBefore("Stack Overflow - A place to ask stuff", " - ")

1
这个非常好用。我期望大多数非平凡项目都会引用Apache Commons,这避免了对子字符串/索引进行容易出错的操作。 - Brian Agnew

8

Kotlin解决方案

使用内置的Kotlin substringBefore函数(文档):

var string = "So much text - no - more"
string = string.substringBefore(" - ") // "So much text"

此外,它还有一个可选的第二个参数,如果未找到定界符,则为返回值。默认值是原始字符串。

string.substringBefore(" - ", "fail")  // "So much text"
string.substringBefore(" -- ", "fail") // "fail"
string.substringBefore(" -- ")         // "So much text - no - more"

5
你可以使用这个。
String mysourcestring = "developer is - development";
String substring = mysourcestring.substring(0,mysourcestring.indexOf("-"));

这句话的意思是“开发者是-”。

我正在寻找一种方法,可以忽略字符串中子字符串后的所有内容。你的答案启发了我想到了以下代码:String substr = mysourcestring.substring(0,mysourcestring.indexOf("searchSeq")+"searchSeq".length()); 例如,如果我需要忽略URL中某个特定子字符串后的所有内容,这段代码就非常有用。 - Aviral Bansal

1
也许这就是你正在寻找的内容:
String str="Stack Overflow - A place to ask stuff";

String newStr = str.substring(0, str.indexOf("-"));

保留与匹配字符串之后的所有内容。 - Peter Lawrey

1

我为所有方法创建了示例程序,SubString似乎是最快的。

Using builder : 54
Using Split : 252
Using Substring  : 10

以下是示例程序代码。
            for (int count = 0; count < 1000; count++) {
        // For JIT
    }
    long start = System.nanoTime();
    //Builder
    StringBuilder builder = new StringBuilder(
            "Stack Overflow - A place to ask stuff");
    builder.delete(builder.indexOf("-"), builder.length());
    System.out.println("Using builder : " + (System.nanoTime() - start)
            / 1000);
    start = System.nanoTime();
    //Split
    String string = "Stack Overflow - A place to ask stuff";
    string.split("-");
    System.out.println("Using Split : " + (System.nanoTime() - start)
            / 1000);
    //SubString
    start = System.nanoTime();
    String string1 = "Stack Overflow - A place to ask stuff";
    string1.substring(0, string1.indexOf("-"));
    System.out.println("Using Substring : " + (System.nanoTime() - start)
            / 1000);
    return null;

1
安全地删除字符串中的一部分,如果标记存在,则保留搜索到的部分,否则不保留。
String input = "Stack Overflow - A place to ask stuff";
String token = " - ";
String result = input.contains(token)
  ? token + StringUtils.substringBefore(string, token)
  : input;
// Returns "Stack Overflow - "

Apache StringUtils函数可以安全地处理null、空和不匹配情况


0
String line = "deltaasm:/u01/app/oracle/product/11.2.0/dbhome_1:N        # line addred by agent";

    String rep = "deltaasm:";
    String after = "";

    String pre = ":N";
    String aft = "";
    String result = line.replaceAll(rep, after);
    String finalresult = result.replaceAll(pre, aft);
    System.out.println("Result***************" + finalresult);

    String str = "deltaasm:/u01/app/oracle/product/11.2.0/dbhome_1:N        # line addred by agent";

    String newStr = str.substring(0, str.indexOf("#"));
    System.out.println("======" + newStr);

0
这将会做你需要的事情:
newValue = oldValue.substring(0, oldValue.indexOf("-");

0

你可以使用我的工具方法来执行此操作。

public static String makeTwoPart(String data, String cutAfterThisWord){
    String result = "";

    String val1 = data.substring(0, data.indexOf(cutAfterThisWord));

    String va12 = data.substring(val1.length(), data.length());

    String secondWord = va12.replace(cutAfterThisWord, "");

    Log.d("VAL_2", secondWord);

    String firstWord = data.replace(secondWord, "");

    Log.d("VAL_1", firstWord);

    result = firstWord + "\n" + secondWord;


    return result;
}`

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