“a*”: 以字符’a’开头的字符串
“*bc*”: 包含字符串’bc’的字符串
“A??”: 以字符’A’开头,且长度为3的字符串
“?A?”: 以字符’A’居其间,且长度为3的字符串
class MyString{
String str;
//其它方法或成员定义
//构造函数
public Boolean isLike(String regex){
……
}
}
new MyString(“abcd”).isLike(“a*”)--true
new MyString(“ABCD”).isLike(“*C*”)--true
new MyString(“ABCD”).isLike(“ABC?”)--true
“*bc*”: 包含字符串’bc’的字符串
“A??”: 以字符’A’开头,且长度为3的字符串
“?A?”: 以字符’A’居其间,且长度为3的字符串
class MyString{
String str;
//其它方法或成员定义
//构造函数
public Boolean isLike(String regex){
……
}
}
new MyString(“abcd”).isLike(“a*”)--true
new MyString(“ABCD”).isLike(“*C*”)--true
new MyString(“ABCD”).isLike(“ABC?”)--true
解决方案 »
- 源代码看不出来!
- JTable中remove(r)与fireTableRowsDeleted(r, r)区别?
- java编译出现问题
- 朋友帮帮忙,能解决问题者必给加分
- jdk1。4。2-09 安装好之后点击java web start 出现:Splash:sysCreateListenerSocket失败信息
- 关于jfreechart的问题,高分求????
- 学软件开发和英语的联系→本人很迷茫,希望高手说下。。
- 关于 <%@taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
- java怎样生成可执行文件?
- java中的static函数
- java模式问题
- 我写的一个冒泡排序法(不用交换数值)
Matcher matcher = pattern.matcher(str);if(matcher.find()) {
return true;
}
return false;
}
*bc* ^.*bc.*
A?? ^A{1}.{2}
?A? ^.{1}A.{1}
/**
*
* a*: 以字符’a’开头的字符串
* *bc*: 包含字符串’bc’的字符串
* A??: 以字符’A’开头,且长度为3的字符串
* ?A?: 以字符’A’居其间,且长度为3的字符串
*
*/
public class MyString { private static String str;
public MyString(){
}
public MyString(String string){
str=string;
}
public void setStr(String string){
str=string;
}
public boolean isLike(String regex){
String regexStr=regex;
if(regexStr.matches("^\\w+\\*$")){
regexStr=regexStr.replace("*", ".*");
}
if(regexStr.matches("^\\*\\w+\\*$")){
regexStr=regexStr.replaceFirst("\\*","^.*");
}
if(regexStr.contains("?")){
regexStr=regexStr.replaceAll("\\?", ".");
}
return str.matches(regexStr);
}
public static void main(String[] args){
System.out.println(new MyString("abcd").isLike("a*"));
System.out.println(new MyString("ABCD").isLike("*C*"));
System.out.println(new MyString("ABCD").isLike("ABC?"));
}
}去测试下,不符合再修改- -!
private String s; public MyString(String s) {
this.s = s;
} public boolean isLike(String regex) {
regex = regex.replaceAll("[\\?]", "\\\\w");
regex = regex.replaceAll("\\*", ".*");
return s.matches(regex);
} public static void main(String[] args) {
boolean b1 = new MyString("abcd").isLike("a*");
boolean b2 = new MyString("ABCD").isLike("*C*");
boolean b3 = new MyString("ABCD").isLike("ABC?");
boolean b4 = new MyString("ABCD").isLike("??C?");
boolean b5 = new MyString("ABCD").isLike("a*");
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
}
}
输出:
true
true
true
true
false
private String string; public MatchString(String string) {
this.string = string;
} public boolean isLike(String regex) {
String re = regex;
re = re.replaceAll("[*]", ".*");
re = re.replaceAll("[?]", ".");
Pattern p = Pattern.compile(re);
Matcher m = p.matcher(string);
return m.matches();
} /**
* @param args
*/
public static void main(String[] args) {
MatchString s = new MatchString("#$**1a22b3c4dc5555");
// 111a222b3c44444dc55555
System.out.println(s.isLike("????*?a??b?c*dc*"));
}}
MyString s = new MyString("[bc2");
System.out.println(s.isLike("[b*"));
}
}class MyString { // remove "?", "*"
private final static char[] REGEX_CHAR = "\\.^${[()]}+|".toCharArray(); private String str; public MyString(String str) {
this.str = str;
} public boolean isNull() {
return (str == null);
} public int length() {
if(isNull()) {
return -1;
}
return str.length();
} public boolean isLike(String pattern) {
return isLike(pattern, true);
} public boolean isLike(String pattern, boolean isCaseInsensitive) {
if(pattern == null) {
throw new NullPointerException("pattern is null");
}
if(isNull()) {
return false;
}
return toRegex(pattern, isCaseInsensitive).matcher(str).matches();
} private Pattern toRegex(String pattern, boolean isCaseInsensitive) {
StringBuilder sb = new StringBuilder(pattern.length());
char[] cs = pattern.toCharArray();
for(int i = 0; i < cs.length; i++) {
if(cs[i] == '?') {
sb.append('.');
continue;
}
if(cs[i] == '*') {
sb.append('.').append('*');
continue;
}
if(isRegexChar(cs[i])) {
sb.append('\\');
}
sb.append(cs[i]);
}
if(isCaseInsensitive) {
return Pattern.compile(sb.toString());
} else {
return Pattern.compile(sb.toString(), Pattern.CASE_INSENSITIVE);
}
} private boolean isRegexChar(char c) {
for(int i = 0; i < REGEX_CHAR.length; i++) {
if(REGEX_CHAR[i] == c) {
return true;
}
}
return false;
}
}