我收到这种格式的字符串:00123456
字符串始终为8位,始终以2为零,其他6位数字为1-9。
我必须将此字符串与另一个字符串进行比较,该字符串具有相同的结构,但没有2个零。因此,00123456应该等于123456.问题是,我没有可能更改字符串(例如删除零)。我唯一能做的就是在第一个字符串之前或之后添加正则表达式。
所以在Java代码中,我需要这样的东西, whithout 更改第一个字符串本身。我只能在之前添加和/或在字符串后添加
String givenStringWithRegex = "(ignore zeros)00123456";
String userInput = "123456";
if (userInput.matches(givenStringWithRegex)) {
// Everything is fine :)
}
提前谢谢你:)
修改 感谢您的答案到目前为止,但问题是,我无法更改客户端应用程序的代码。客户端应用程序执行userInputString.matches(givenStringWithRegex),我无法更改此设置。这就是为什么我需要另一种解决方案,例如将正则表达式添加到给定的字符串而不更改字符串本身。
EDIT2: 这是客户端应用程序中的代码,我在这里无法改变。 "正则表达式"变量是给定的字符串和" scansValue"是用户输入(123456)。给定的字符串在我的具体示例00123456中。就像我之前写的,我无法操纵00123456.我只能在它之前或之后添加正则表达式,例如??? 00123456 ???。并且00 ??? 123456是不可能的。
我可以在高级系统的配置文件中添加此正则表达式,因此不需要更改代码。这就是我要求正则表达式解决方案的原因,因为我不想在高级系统和客户端应用程序中更改代码。
public final class RegexValidator implements StringScanValidator {
private final String regex;
public RegexValidator(final String regex) {
this.regex = regex;
}
@Override
public StringScanValidatorResult validate(final String scannedValue) {
return scannedValue.matches(regex) ? new StringScanValidatorResult(true, scannedValue)
: new StringScanValidatorResult(false, scannedValue);
}
}
答案 0 :(得分:0)
只需使用substring()
,就像这样:
public static void main(String[] args) {
String givenStringWithRegex = "00123456"; // always 8 digits
String userInput = "123456"; //so, always 6 digits
System.out.println(givenStringWithRegex.substring(2, 8).equals( // do substring for digits 2 to 8
userInput));
}
O/P :
true
答案 1 :(得分:0)
String givenString = "00123456".substring(2); String userInput = "123456"; if(userInput.equals(givenString) { // Everything is fine :) }
子字符串将满足您的需求。它将剪切与您相关的字符串的一部分。
答案 2 :(得分:0)
你能做这样的事吗:
String givenString = "00123456";
String userInput = "123456";
if (("00"+userInput).equals(givenString)) {
// Everything is fine :)
}
答案 3 :(得分:0)
除了你的问题,你从不可以改变java中的String
:它们是不可变的。但是你可以制作原始字符串的任意数量的副本。因此,您可以使用substring
剪切0
,而无需更改原始字符串:
String original = "00123456";
String compare = "123456";
String copy = original.substring(2);
if(copy.equals(compare)) {...}
另一种方法是用零添加用户输入:
String original = "00123456";
String compare = "123456";
if(original.equals("00"+compare)) {...}
所以使用正常的表达看起来像是可怕的过度杀伤!
答案 4 :(得分:0)
字符串是不可变的。你可以这样做:
String givenStringWithRegex = "(ignore zeros)00123456";
String userInput = "123456";
if (("00"+userInput).equals(givenStringWithRegex)) {
//its equal and none of your strings are modified as string are immutable
}
答案 5 :(得分:0)
public static String regexStr(String str) {
Pattern p =
Pattern.compile("00(\\d{6})", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); //start with 00 then followed by 6 digits
Matcher m = p.matcher(str);
if (m.find()) {
String found= m.group(1);
return found;
}
return null;
}
public static void main(String[] args) throws ParseException {
String givenStringWithRegex = "00123456";
String userInput = "123456";
if (userInput.equalsIgnoreCase(regexStr(givenStringWithRegex))) {
// Everything is fine :)
System.out.println("Everything is fine");
}
}
答案 6 :(得分:0)
这是客户端应用程序中的代码,我在这里无法改变。 “regex”变量是给定的字符串,“scanningValue”是 用户输入(123456)。给定的字符串在我的具体示例中 就像我之前写过的那样,我无法操纵00123456.我只能在它之前或之后添加正则表达式,例如??? 00123456 ???和 00 ??? 123456是不可能的。
scannedValue.matches(regex)
正则表达式规则使你的愿望无法实现。