前幾天就在著手寫本文了。情景是這樣的,一個“192.168.0.1”的 IP 地址,按照“.”標志分解成四段,考慮片刻打算以 Jakarta-ORO 實現。
但是寫著寫著,發現用 String.split(String arg0) 方法也可以實現需求。遂陷入了迷茫,而后轉念一想,雞肋就雞肋吧,說不定下次會在其他地方用到。
先來看看 String.split(String arg0) 是如何實現的,下面是最想當然的寫法:
嗯,測試以后,控制臺打印出“0”,那這樣一來 String.split(String arg0) 豈不是不能實現需求咯?且慢,我們如果加上轉義符會怎樣呢?
這次終于如愿以償了,控制臺打印出“4”。至于為什么會這樣,我也沒有深入探索,和朋友交流后大概是說“.”在 Java 中有特殊含義,如果要進行正則匹配,就必須轉義一下。
轉入 Jakarta-ORO,下面看看它是如何進行匹配的:
關于 Jakarta-ORO 更多的信息,網上一搜一大堆,在此就不進行細致的代碼解釋了。
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://www.aygfsteel.com/rosen
但是寫著寫著,發現用 String.split(String arg0) 方法也可以實現需求。遂陷入了迷茫,而后轉念一想,雞肋就雞肋吧,說不定下次會在其他地方用到。
先來看看 String.split(String arg0) 是如何實現的,下面是最想當然的寫法:
public class SplitTest {
public static void main( String[] args ){
String ip = "192.168.0.1";
String[] ips = ip.split(".");
System.out.println(ips.length);
}
}
public static void main( String[] args ){
String ip = "192.168.0.1";
String[] ips = ip.split(".");
System.out.println(ips.length);
}
}
嗯,測試以后,控制臺打印出“0”,那這樣一來 String.split(String arg0) 豈不是不能實現需求咯?且慢,我們如果加上轉義符會怎樣呢?
public class SplitTest {
public static void main( String[] args ){
String ip = "192.168.0.1";
String[] ips = ip.split("\\.");
System.out.println(ips.length);
}
}
public static void main( String[] args ){
String ip = "192.168.0.1";
String[] ips = ip.split("\\.");
System.out.println(ips.length);
}
}
這次終于如愿以償了,控制臺打印出“4”。至于為什么會這樣,我也沒有深入探索,和朋友交流后大概是說“.”在 Java 中有特殊含義,如果要進行正則匹配,就必須轉義一下。
轉入 Jakarta-ORO,下面看看它是如何進行匹配的:
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.MatchResult;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
public class SplitTest {
public static void main( String[] args ) throws MalformedPatternException{
String ip = "192.168.0.1";
PatternCompiler pc = new Perl5Compiler();
PatternMatcher pm = new Perl5Matcher();
Pattern pattern = pc
.compile("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})");
pm.contains(ip, pattern);
MatchResult mr = pm.getMatch();
int ip0 = Integer.parseInt(mr.group(1));
int ip1 = Integer.parseInt(mr.group(2));
int ip2 = Integer.parseInt(mr.group(3));
int ip3 = Integer.parseInt(mr.group(4));
System.out.println(ip0+" "+ip1+" "+ip2+" "+ip3);
}
}
import org.apache.oro.text.regex.MatchResult;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
public class SplitTest {
public static void main( String[] args ) throws MalformedPatternException{
String ip = "192.168.0.1";
PatternCompiler pc = new Perl5Compiler();
PatternMatcher pm = new Perl5Matcher();
Pattern pattern = pc
.compile("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})");
pm.contains(ip, pattern);
MatchResult mr = pm.getMatch();
int ip0 = Integer.parseInt(mr.group(1));
int ip1 = Integer.parseInt(mr.group(2));
int ip2 = Integer.parseInt(mr.group(3));
int ip3 = Integer.parseInt(mr.group(4));
System.out.println(ip0+" "+ip1+" "+ip2+" "+ip3);
}
}
關于 Jakarta-ORO 更多的信息,網上一搜一大堆,在此就不進行細致的代碼解釋了。
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://www.aygfsteel.com/rosen