Java 在字符串上使用子字符串的替代方法
我有一个包含下划线的字符串,如下所示: 123445_Lisick 我想删除下划线后字符串中的所有字符。我已经尝试了下面的代码,它正在工作,但是有没有其他方法可以做到这一点,因为我需要将此逻辑放入Java 在字符串上使用子字符串的替代方法,java,Java,我有一个包含下划线的字符串,如下所示: 123445_Lisick 我想删除下划线后字符串中的所有字符。我已经尝试了下面的代码,它正在工作,但是有没有其他方法可以做到这一点,因为我需要将此逻辑放入for循环中,以从ArrayList提取元素 public class Test { public static void main(String args[]) throws Exception { String str = "123445_Lisick"; i
for
循环中,以从ArrayList提取元素
public class Test {
public static void main(String args[]) throws Exception {
String str = "123445_Lisick";
int a = str.indexOf("_");
String modfiedstr = str.substring(0, a);
System.out.println(modfiedstr);
}
}
另一种方法是使用该方法
但我不认为这能给你带来什么。您使用的方法没有什么问题。另一种方法是使用该方法
但我不认为这能给你带来什么。你使用的方法没有什么问题。你的方法很好。虽然API文档中没有明确说明,但我觉得可以安全地假设indexOf(char)将在O(n)时间内运行。由于字符串是无序的,并且您不知道下划线的位置,因此无法避免这种线性搜索时间。完成搜索后,需要提取子字符串以供将来处理。通常可以安全地假设,对于这样的简单操作,在一种经过合理优化的语言中,库函数将得到优化 但是请注意,您正在做一个隐含的假设:
- 字符串中将存在下划线
- 如果字符串中有多个下划线,则输出中应包括除第一个下划线以外的所有下划线
public static String stringAfter(String source, char delim) {
if(source == null) return null;
int index = source.indexOf(delim);
return (index >= 0)?source.substring(index):source;
}
你的方法很好。虽然API文档中没有明确说明,但我觉得可以安全地假设indexOf(char)将在O(n)时间内运行。由于字符串是无序的,并且您不知道下划线的位置,因此无法避免这种线性搜索时间。完成搜索后,需要提取子字符串以供将来处理。通常可以安全地假设,对于这样的简单操作,在一种经过合理优化的语言中,库函数将得到优化 但是请注意,您正在做一个隐含的假设:
- 字符串中将存在下划线
- 如果字符串中有多个下划线,则输出中应包括除第一个下划线以外的所有下划线
public static String stringAfter(String source, char delim) {
if(source == null) return null;
int index = source.indexOf(delim);
return (index >= 0)?source.substring(index):source;
}
你也可以用这样的东西:
public class Main {
public static void main(String[] args) {
String str = "123445_Lisick";
Pattern pattern = Pattern.compile("^([^_]*).*");
Matcher matcher = pattern.matcher(str);
String modfiedstr = null;
if (matcher.find()) {
modfiedstr = matcher.group(1);
}
System.out.println(modfiedstr);
}
}
正则表达式从输入字符串的开头开始对模式进行分组,直到找到一个非
的字符
然而,正如蜥蜴比尔所写,我不认为你现在这样做的方法有任何问题。我会像你那样做。你也可以这样做:
public class Main {
public static void main(String[] args) {
String str = "123445_Lisick";
Pattern pattern = Pattern.compile("^([^_]*).*");
Matcher matcher = pattern.matcher(str);
String modfiedstr = null;
if (matcher.find()) {
modfiedstr = matcher.group(1);
}
System.out.println(modfiedstr);
}
}
正则表达式从输入字符串的开头开始对模式进行分组,直到找到一个非
的字符
然而,正如蜥蜴比尔所写,我不认为你现在这样做的方法有任何问题。我会像你那样做。我肯定还有其他的方法,但是你这样做有什么不对吗?这看起来是完成任务的一种有效方法。你可以使用正则表达式,但我看不出它有什么优势,而且它的效率可能会更低。请看这篇文章:另一种方法是使用带有
String#replaceAll(String,String)
或split
的正则表达式,现在就用你现在的方式来做。我肯定还有其他的方法,但是你现在的方式有什么问题吗?这看起来是完成任务的一种有效方法。你可以使用正则表达式,但我看不出它有什么优势,而且它的效率可能会更低。请参阅本文:另一种方法是使用带有String#replaceAll(String,String)
或split
的正则表达式,按现在的方式执行。在完全没有下划线的情况下,这种方法也能很好地工作。(可能需要,也可能不需要)在没有下划线的情况下,这也能很好地工作。(可能需要,也可能不需要。)