问题描述
如题,其中person是一个类名,但是我用getName后带着包名,现在我只要Person注意不能用String的方法,就为了练正则嘛
解决方案
解决方案二:
importjava.text.ParseException;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassTest{publicstaticvoidmain(String[]args)throwsParseException{Stringstr=":com.factory.web.Person:com.factory.web.Animal";Patternpattern=Pattern.compile("(([:\w]+\.(?!\.))+)(\w+)");Matchermatcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group(1)+"=>"+matcher.group(3));}}}
解决方案三:
publicstaticvoidmain(Stringargs[]){Stringstr="com.factory.web.Person";System.out.println(str.replaceAll(".*\.(\w+)$","$1"));}
解决方案四:
你不要用Person.class.getName方法,用Person.class.getSimpleName()就可以得到不带包名的了。Java的标识符有点复杂,除了字母、下划线和$外,还允许诸如汉字的,因此需要有个通用性。importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassTest{publicstaticvoidmain(String[]args){Stringregex="(\p{javaJavaIdentifierStart}\p{javaJavaIdentifierPart}*)$";String[]strs={"Person","com.factory.web.person","A","com.factory.web.Person","com.factory.web.人类","com.factory.web.Person$2"};Patternp=Pattern.compile(regex);for(inti=0;i<strs.length;i++){Matcherm=p.matcher(strs[i]);while(m.find()){System.out.println(strs[i]+"-->"+m.group(1));}}}}
\p{javaJavaIdentifierStart},当中的javaJavaIdentifierStart就是Character.isJavaIdentifierStart方法。Character中所有的isXxx方法,把方法名的is改成java都可以用于\p结构当中。
解决方案五:
p=Pattern.compile("(([^\.]+\.)+)([^]+)");m=p.matcher(":com.factory.web.Person:com.factory.web.Animal");while(m.find()){System.out.println(m.group(1)+"=>"+m.group(3));}