Java 如何查找字符串是否以';开头;s'';r'';p';在爪哇
这是我的字符串Java 如何查找字符串是否以';开头;s'';r'';p';在爪哇,java,regex,apache-commons,Java,Regex,Apache Commons,这是我的字符串 String sample = "s5656"; 如果字符串的第一个字符包含's'或'p'或'r'意味着我应该删除该字符,否则我必须删除该字符 返回原始字符串 有没有像apache common中的“regex”或“StringUtils”这样的优化方法?为什么要为这种简单的需求添加第三方jar?你可以试试下面的方法 String sample = "s5656"; if(sample.startsWith("s")||sample.startsWith("r")||sampl
String sample = "s5656";
如果字符串的第一个字符包含's'或'p'或'r'意味着我应该删除该字符,否则我必须删除该字符
返回原始字符串
有没有像apache common中的“regex”或“StringUtils”这样的优化方法?为什么要为这种简单的需求添加第三方
jar
?你可以试试下面的方法
String sample = "s5656";
if(sample.startsWith("s")||sample.startsWith("r")||sample.startsWith("p")){
// do necessary
}else{
// do necessary
}
尝试此操作。将yourString.replaceAll()/replaceFirst()
与空字符串一起使用。使用m
见演示
一个简单的正则表达式可以解决您的问题:
public static void main(String[] args) {
String s = "s5656s";
System.out.println(s.replaceFirst("^[spr]", "")); // a String which begins with s,p or r
}
O/p:
注:这里的regex导致了更小/更简单但效率低下的代码。使用Ruchira的答案编写一个相当长但有效的代码。:) 我应该使用带有多行修饰符的replaceAll
函数(?m)
输出:
5656s
878dsjhj
fshghg
Java文档我的应用程序中有jar,因此如果它比我们的代码好,我们可以使用它。因为我担心nullPointerException,所以这也是我选择第三方库的原因。但是我会接受您的解决方案。System.out.println(“indexOf::”+StringUtils.startsWithAny(示例,新字符串[]{“s”,“r”,“p”);这个怎么样?哪一个最好?@VelNaga-是的。您还可以使用string.startsWith()
。我只是在展示一种方式。有多种方法。@最重要的是,你为什么认为正则表达式在这里不起作用。它甚至不扫描字符串。只扫描开始的1个字符?@vks-在Java中,使用正则表达式最终会导致调用同步方法-Pattern.matcher()。'charAt(0)
或startsWith()不会发生这种情况
@TheLostMind mmm thanx 4信息:)Java中没有g
标志,使用字符类代替单个字符。这取决于数据的读取方式。如果逐行读取,则不太可能需要(?m)
。输入字符串中可能会出现一些新行字符。。
5656s
String s = "s5656s\n" +
"r878dsjhj\n" +
"fshghg";
System.out.println(s.replaceAll("(?m)^[spr]", ""));
5656s
878dsjhj
fshghg