在 java 中删除开头的部分字符串和最后的部分字符串

Delete some part of the string in beginning and some at last in java

我想要一个动态代码,它将 trim 字符串的某些部分放在开头,然后放在最后。我能够 trim 最后一部分,但无法 trim 字符串的初始部分完全达到特定点。输出中仅删除第一个字符。

public static String removeTextAndLastBracketFromString(String string) {
  StringBuilder str = new StringBuilder(string);
  int i=0;
  do {
    str.deleteCharAt(i);
    i++;
  } while(string.equals("("));
  str.deleteCharAt(string.length() - 2);
  return str.toString();
}

这是我的代码。当我将 Awaiting Research(5056) 作为参数传递时,给出的输出是 waiting Research(5056。我想 trim 这样的字符串的初始部分直到 ( 我只想要数字作为我的输出。我在这里的预期输出是 - 5056。请帮助。

您不需要循环(在您的代码中),您可以将 String.substring(int, int)String.indexOf(char) 结合使用:

public static void main(String[] args) {
    // example input
    String input = "Awaiting Research(5056)";
    // find the braces and use their indexes to get the content
    String output = input.substring(
                        input.indexOf('(') + 1, // index is exclusive, so add 1
                        input.indexOf(')')
                    );
    // print the result
    System.out.println(output);
}

输出:

5056

提示:

仅当您确定时才使用此输入将始终包含 () 以及 indexOf('(') < indexOf(')') 或句柄 IndexOutOfBoundsExceptions,这将发生在大多数 Strings 不匹配大括号约束。

使用正则表达式提取您需要的内容是更好的选择:

String test = "Awaiting Research(5056)";
Pattern p = Pattern.compile("([0-9]+)");
Matcher m = p.matcher(test);
if (m.find()) {
    System.out.println(m.group());
}

对于您的情况,电池使用正则表达式来提取您感兴趣的部分。

Pattern pattern = Pattern.compile("(?<=\().*(?=\))");
Matcher matcher = pattern.matcher("Awaiting Research(5056)");
if(matcher.find())
{
    return matcher.group();
}

如果您的目标只是查看字符串的一个数值,请尝试使用正则表达式将字符串拆分为相应的数值,然后将数字与字符串分开 例如:

 Pattern pattern = Pattern.compile("\d+");
 Matcher matcher = pattern.matcher("somestringwithnumberlike123");
 
 if(matcher.find()) {
     System.out.println(matcher.group());
 }

解决问题要容易得多,例如使用 String.indexOf(..)String.substring(from,to)。但是,如果出于某种原因你想坚持你的方法,这里有一些提示:

您的代码执行的是因为:

  • string.equals("(") 仅当给定字符串恰好为 "("
  • 时才为真
  • 如果条件不成立,do {code} while (condition) 循环执行一次代码 -> 考虑使用 while (condition) {code} 循环代替
  • 如果您更改条件以检查 i 处的字符,您的代码将删除第一个、第三个、第五个等等:第一次执行后,i 为 1 并且 i 处的字符现在是原始字符的第三个字符字符串(因为第一个已经被删除)-> 考虑总是检查和删除 charAt 0.