Rav*_*ore 1 java string replace replaceall
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main (String[] args)
{
int turns;
Scanner scan=new Scanner(System.in);
turns=scan.nextInt();
while(turns-->0)
{
String pattern=scan.next();
String text=scan.next();
System.out.println(regex(pattern,text));
}
}//end of main method
static int regex(String pattern,String text)
{
if(pattern.startsWith("^"))
{
if(text.startsWith(pattern.replace("^","")))
return 1;
}
else if(pattern.endsWith("$"))
{
if(text.endsWith(pattern.replace("$","")))
return 1;
}
else
{
if(text.contains(pattern))
return 1;
}
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
输入:2或$ hodor或$ arya
输出:1 0
在这个程序中,我正在扫描两个参数(String),其中第一个是模式,第二个是我必须找到模式的文本.如果模式匹配,方法应该返回1,否则返回0.虽然使用替换它工作正常但是当我将replace()替换为replaceAll()时它没有按预期正常工作.如何使replaceAll()在此程序中工作.
因为replaceAll需要一个定义正则表达式的字符串,并且$在正则表达式中意味着"行尾".从链接:
Run Code Online (Sandbox Code Playgroud)public String replaceAll(String regex, String replacement)将给定替换的给定正则表达式匹配的此字符串的每个子字符串替换.
你需要使用反斜杠(它也必须在字符串文字中转义)来逃避它:
if(text.endsWith(pattern.replaceAll("\\$","")))
Run Code Online (Sandbox Code Playgroud)
对于要逐字替换的复杂字符串,Pattern.quote非常有用:
if(text.endsWith(pattern.replaceAll(Pattern.quote("$"),"")))
Run Code Online (Sandbox Code Playgroud)
你不需要它,因为你的替换是"",但如果你的替换可能有特殊字符(如反斜杠或美元符号),也可以使用Matcher.quoteReplacement替换字符串.