这道题目是shopee笔试的第二道题目,这道题比较幸运通过了。
大意如下:
有一段字符串如:
三星N05S\t02\n\晨光BM8N\t0x78
是从csv文件读取出来的,表示文具的名称和数量,‘\t‘用于分割文具名和数量,‘\n‘用于分割不同类别,数量可以用十进制或16进制表示,然后要求进行分割,输出结果,每一行分别是文具名加逗号加数量,如果有错误,输出null。
代码 java
import java.util.ArrayList;
import java.util.Scanner;
public class CSVFileTrans {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()){
String input = sc.nextLine();
String[] inputs = input.split("\\\\n");
ArrayList<String> names = new ArrayList<>();
ArrayList<Integer> nums = new ArrayList<>();
for (String s : inputs) {
System.out.println("s: " + s);
String[] t = s.split("\\\\t");
if(t.length!=2 || t[0].length()==0){
System.out.println("null");
return;
}
int n = 0;
boolean flag = false;
if(t[1].charAt(0)==‘0‘ && t[1].charAt(1)==‘x‘){
n = Integer.parseInt(t[1], 16);
flag = true;
}else{
n = Integer.parseInt(t[1]);
flag = true;
}
if(flag){
names.add(t[0]);
nums.add(n);
}
}
if(names.size()==inputs.length){
for(int i=0; i<names.size(); i++){
System.out.println(names.get(i) + "," + nums.get(i));
}
return;
}
System.out.println("null");
}
}
}
两个需要注意的点吧,一个是Integer.parseInt()是可以parse十六进制的数的,需要用另一个参数16来表示,另一个就是反斜杠‘‘在java中需要用‘\‘来表示,而反斜杆本身是有特殊含义的字符,需要转义,比如在cpp中有‘\‘表示反斜杆,java中就需要表示成‘\\‘,第一对‘\‘表示转义,第二对‘\‘表示反斜杆,就是java的表示有点特殊。注意一下。
原文:https://www.cnblogs.com/zhengxch/p/14742677.html