Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找字符串是否以';开头;s'';r'';p';在爪哇_Java_Regex_Apache Commons - Fatal编程技术网

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