标签:
今天测试人员提了一个小需求,ip地址A.B.C.D ,ABCD任意一个域为空时当做0处理。例如 192... ,后台当做192.0.0.0处理。
我想到的方法是用字符串的split方法,首先取得ABCD四个域的值,假设text1为ip地址控件取得的实际文本值,text2为转换后的值。
String text1 = "192...";
String[] fields = text1.split("\\.");
System.out.println(Arrays.toString(fields)); //[192]
用于匹配的正则表达式如果再字符串尾部连续匹配到n个字符串,这n个字符串都是被忽略的。
本例中用于匹配的正则表达式为"\\.",也就是讲将点号转义为普通的符号。点号再"192..."尾部连续匹配了三个点号。所以这三个点号被忽略,实际上相当于
text1="192",换个例子:
String text1 = "88814534212"; String[] fields = text1.split("[12345]"); System.out.println(Arrays.toString(fields));
猜猜这个结果是多少?
还没解决我的实际问题,实际应用场景中,用户必然可以输入"192...","..."等ip,我需要转换成"192.0.0.0"及"0.0.0.0",
我想到的方案是:
String text1 = "..."; String[] fields = (text1+" ").split("\\.");
System.out.println(Arrays.toString(fields)); //[, , 3, ]
字符串尾部加上一个空格后,点号在字符串尾部不能匹配到字符串,所以没有被忽略的字符串,所以从前往后split后的数组中依次放入了"","",""," ",我只需要将空字符串或空格用0替换就达到了我想要的结果。
String text1 = "..."; // 带分割的字符串text1 String[] fields = (text1 + " ").split("\\.");// 把text1用.分割成数组fields
System.out.println(Arrays.toString(fields)); for (int i = 0; i < fields.length; i++) { if (fields[i].trim().equals("")) { fields[i] = "0"; } } String text2 = ""; for (String string : fields) { text2 += string + "."; } text2 = text2.substring(0, text2.lastIndexOf(".")); System.out.println(text2);
标签:
原文地址:http://www.cnblogs.com/tibit/p/5111699.html