我正在尝试用Java实现通配符。
这是我的代码:
public class Assign {
public boolean compare(String s1, String s2)
{
char [] s3 = s1.toCharArray();
char [] s4 = s2.toCharArray();
int i,j;
int k = 0;
for(i=0;i<s3.length;i++)
{
for(j=0;j<s4.length;j++)
{
if(s3[i] == s4[j])
{
if(s4[j] == '*')
{
i++;
if(s3[i] == s4[s4.length-1])
{
return true;
}
}
}
}
}
return false;
}
public static void main(String args[])
{
Assign a = new Assign();
boolean r = a.compare("a hello b", "a * b");
System.out.println(r);
}
}
将有两个参数传递给该函数。一个是字符串,另一个是正则表达式。
示例包括:
1)如果传递的字符串是“a hello b”而正则表达式是“a * b”那么该函数应该返回TRUE,因为在*的位置可以存在任意数量的字符。
2)如果传递的字符串是“a X b”且正则表达式是“a?b”那么返回值应为TRUE,因为如果有?在正则表达式中,a和b之间应该只有一个字符。
像这样,它适用于所有情况。我认为我认为的逻辑很好,但我在编码部分遇到了麻烦。
我不想导入Pattern和Matcher。没有他们,我必须完成这个。
请说,任何人都可以通过指定正确的代码来帮助我。
感谢你
答案 0 :(得分:3)
使用正则表达式。不要重新发明轮子。
答案 1 :(得分:0)
正如我所说,你可以这样做提取简单的子字符串。在这里我查了一下 对于一个案例,对其他案件做同样的事情。
public class Assign {
public boolean compare(String s1, String s2)
{ String s="";
try
{
s=s1.substring(s1.indexOf('a')+2,s1.indexOf('b')-1);
}
catch(IndexOutOfBoundsException e)
{
return false;
}
System.out.println("string: "+s);
if(s2.substring(2,3).equals("*")&&s.length()>=1)
{return true;}
else
return false;
}
public static void main(String args[])
{
Assign a = new Assign();
boolean r = a.compare("a b hello", "a * b");
System.out.println(r);
}
}
编辑: 可能是我没有检查过所有的情况。这是一种接近的方式。
答案 2 :(得分:0)
假设正则表达式只包含
*
或?
时间的实例
我使用substring()
&amp;编写了一个简单的程序。 indexOf()
,厌倦了对要比较的字符串regex
进行评估。
package problems;
public class WildCardCompare {
public boolean compare(String str, String regex) {
if(regex == null || str == null) {
return false;
}
if(regex.equals("*")) {
return true;
}
if(regex.equals("?") && str.length() == 1) {
return true;
}
if(!regex.contains("*") && !regex.contains("?")) {
return str.equals(regex);
}
String token = null;
if(regex.contains("*")) {
token = "*";
}
if(regex.contains("?")) {
token = "?";
}
if(token != null) {
//String before *, if any...
String before = regex.substring(0, regex.indexOf(token));
//String after *, if any...
String after = regex.substring(regex.indexOf(token)+1, regex.length());
boolean bmatches = true;
if(before != null && before.length() != 0) {
if(str.indexOf(before) == 0) {
bmatches = true;
}
else {
bmatches = false;
}
}
boolean amatches = true;
if(after != null && after.length() != 0) {
if(str.indexOf(after) == (str.length() - after.length())) {
amatches = true;
}
else {
amatches = false;
}
}
return bmatches && amatches;
}
return false;
}
public static void main(String args[])
{
boolean r;
WildCardCompare compare = new WildCardCompare();
r = compare.compare("a b hello", "a b *");
System.out.println(r);
r = compare.compare("a hello b", "a * b");
System.out.println(r);
r = compare.compare("a hello b", "aaaa*bbbb");
System.out.println(r);
r = compare.compare( "aaaaTbbbb", "aaaa*bbbb");
System.out.println(r);
r = compare.compare( "aT", "a?");
System.out.println(r);
r = compare.compare("AT", "a?");
System.out.println(r);
r = compare.compare( "aXb", "a?b");
System.out.println(r);
r = compare.compare( "abc", "xyz");
System.out.println(r);
}
}
这是输出。
true
true
false
true
true
false
true
false
我觉得这个程序不是“万无一失”,只能作为解决正则表达式匹配问题的一个例子
PS:请参阅https://softwareengineering.stackexchange.com/了解许多此类问题