在 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(')')
或句柄 IndexOutOfBoundsException
s,这将发生在大多数 String
s 不匹配大括号约束。
使用正则表达式提取您需要的内容是更好的选择:
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.
我想要一个动态代码,它将 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(')')
或句柄 IndexOutOfBoundsException
s,这将发生在大多数 String
s 不匹配大括号约束。
使用正则表达式提取您需要的内容是更好的选择:
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.