题目:
ipv7 转 10进制输出,不能调特殊的ip转换库函数:
1.0.0.0.0.0.2 => 281474976710658
1.0.....2 => 281474976710658
# 中间的0可以进行压缩表示, 但是首位的不能压缩
某个位上不能0开头如:
1.013.1.0...2 => -1
某个位上值需要在0-255之间 否则返回 -1
1.258.1.1.1.1.2 => -1
错误就输入-1
需要注意测试用例可能包含:
1.&.0.0.0.0.1 # 含有其他符号,返回-1
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true){
String str = scanner.nextLine();
System.out.println(trans(str));
}
}
static Long trans(String str){
char firstC = str.charAt(0);
char lastC = str.charAt(str.length() - 1);
if(firstC > '9' || firstC < '0'){
return -1L;
}
if(lastC > '9' || lastC < '0'){
return -1L;
}
int numberOfPoint = 0;
char cur;
StringBuilder sb = new StringBuilder();
int k = 0;
String[] split = new String[100];
for(int i = 0; i < str.length(); i++){
cur = str.charAt(i);
if((cur >= '0' && cur <= '9') || cur == '.'){
if(cur == '.' ){
if(str.charAt(i - 1) == '.') sb.append(0);
split[k++] = sb.toString();
sb = new StringBuilder();
numberOfPoint++;
}else{
sb.append(cur);
}
}else {
return -1L;
}
}
split[k++] = sb.toString();
if(numberOfPoint != 6){
return -1L;
}
int[] numbers = new int[7];
for(int i = 0; i < 7; i++){
if((split[i].length() > 1 && split[i].charAt(0) == '0') || split[i].length() > 3){
return -1L;
}
numbers[i] = Integer.parseInt(split[i]);
if (numbers[i] > 255) {
return -1L;
}
}
Long[] map = new Long[]{
1L << (8 * 6),
1L << (8 * 5),
1L << (8 * 4),
1L << (8 * 3),
1L << (8 * 2),
1L << (8 * 1),
1L << (8 * 0),
};
Long res = 0L;
for(int i = 0; i < numbers.length; i++){
res += numbers[i] * map[i];
}
return res;
}
}
更新
发现大问题了 刚开始用spelit分割点,str.split(".")
一直分割不成功 忘记需要转义了 哎!!
所以需要注意类似这种
public class Main {
public static void main(String[] args){
String s = "xxx\\xxx.xxx[xxx(xxx{xxx";
String[] split = s.split("\\\\");
for (String s1 : split) {
System.out.print(s1 + " ");
}
System.out.println();
split = s.split("\\.");
for (String s1 : split) {
System.out.print(s1 + " ");
}
System.out.println();
split = s.split("\\[");
for (String s1 : split) {
System.out.print(s1 + " ");
}
}
}
================输出结果====================
xxx xxx.xxx[xxx(xxx{xxx
xxx\xxx xxx[xxx(xxx{xxx
xxx\xxx.xxx xxx(xxx{xxx
Process finished with exit code 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)