package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;
public class A11 {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("请输入测试方式:");
System.out.println("1=单一测试 2=对比测试");
long st = System.nanoTime();
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
scan.close();
switch (i) {
case 1:
start();
break;
case 2:
begin();
break;
default:
break;
}
System.out.println();
System.out.println("total times " + (System.nanoTime() - st));
}
// 单一测试入口
public static void start() throws FileNotFoundException {
ArrayList<String> list = new ArrayList<String>();
Scanner sc = new Scanner(new File("C://Path/To/File/"));
while (sc.hasNextLine()) {
String str = sc.nextLine();
Pattern pattern = Pattern.compile("(?<=can[0-9] ).*");
Matcher matcher = pattern.matcher(str);
if (matcher.find())
;
/*
*有些CAN后有校验码,可通过后几位匹配精准发现CAN报文这里暂定三位:
* String str1=matcher.group();
* if (matcher.group().length() > 14) {
* String newStr = str1.substring(str1.length()-3);
* if(newStr.charAt(0) != newStr.charAt(1) && newStr.charAt(0) != newStr.charAt(2)) {
* String flag = matcher.group().substring(0, 14);
* list.add(flag);}
**/
if (matcher.group().length() > 14) {
String flag = matcher.group().substring(0, 14);
list.add(flag);
}
}
Map<String, Integer> map = count(list);
Map<String, Integer> map2 = DoList(map);
ArrayList<String> sss = new ArrayList<String>();
Iterator<Entry<String, Integer>> iter = map2.entrySet().iterator();
Iterator<Entry<String, Integer>> iter2 = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, Integer> entry = iter.next();
if (entry.getValue() == 2) {
sss.add(entry.getKey());
}
}
System.out.println("可能的仲裁ID为:" + sss);
System.out.println("------前14位,实际测试需补六位任意数如(000000)------");
int i = 0;
while (iter2.hasNext()) {
Entry<String, Integer> entry2 = iter2.next();
for (String s : sss) {
if (entry2.getKey().substring(0, 3).equals(s)) {
System.out.print(entry2.getKey() + " ");
i++;
}
}
}
System.out.println("");
System.out.println("--------------------" + i + "项---------------------------");
sc.close();
}
// 对比测试入口
public static void begin() throws FileNotFoundException {
String BeforeSend = "C://Path/To/File/"; // 控车前数据
String AfterSend = "C://Path/To/File/"; // 控车后数据
Map<String, Integer> map1 = upload(BeforeSend);
Map<String, Integer> map2 = upload(AfterSend);
Map<String, Integer> map3 = DoList(map1);
Map<String, Integer> map4 = DoList(map2);
ArrayList<String> list = getDiffrent(map3, map4);
System.out.println("可能的仲裁ID为:" + list);
System.out.println("------前14位,实际测试需补六位任意数如(000000)------");
Iterator<Entry<String, Integer>> iter = map2.entrySet().iterator();
int i = 0;
while (iter.hasNext()) {
Entry<String, Integer> entry2 = iter.next();
for (String l : list) {
if (entry2.getKey().substring(0, 3).equals(l)) {
System.out.print(entry2.getKey() + " ");
i++;
}
}
}
System.out.println("");
System.out.println("--------------------" + i + "项---------------------------");
}
// 文件上传处理 除重 筛选仲裁ID
public static Map<String, Integer> upload(String s) throws FileNotFoundException {
Scanner scan = new Scanner(new File(s));
ArrayList<String> array = new ArrayList<String>();
while (scan.hasNextLine()) {
String str = scan.nextLine();
Pattern pattern = Pattern.compile("(?<=can[0-9] ).*");
Matcher matcher = pattern.matcher(str);
if (matcher.find())
;
if (matcher.group().length() > 14) {
String flag = matcher.group().substring(0, 14);
array.add(flag);
}
}
scan.close();
Map<String, Integer> map = count(array);
return map;// 264
}
// 对比测试对比函数,查找空车后多出的CAN数据
public static ArrayList<String> getDiffrent(Map<String, Integer> Before, Map<String, Integer> After) {
ArrayList<String> diff = new ArrayList<String>();
ArrayList<String> buffer = new ArrayList<String>();
Iterator<Entry<String, Integer>> iter = Before.entrySet().iterator();
Iterator<Entry<String, Integer>> iter2 = After.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, Integer> entry = iter.next();
if (entry.getValue() == 2) {
buffer.add(entry.getKey());
}
}
while (iter2.hasNext()) {
Entry<String, Integer> entry2 = iter2.next();
if (entry2.getValue() == 2) {
if (!buffer.contains(entry2.getKey())) {
diff.add(entry2.getKey());
}
}
}
return diff;
}
// 计数
public static Map<String, Integer> count(ArrayList<String> list) {
Map<String, Integer> map = new HashMap<String, Integer>();
for (String s : list) {
if (map.containsKey(s)) {
Integer old = map.get(s);
map.put(s, old + 1);
} else {
map.put(s, 1);
}
}
return map;
}
// Map转ArrayList
public static Map<String, Integer> DoList(Map<String, Integer> m) {
ArrayList<String> array1 = new ArrayList<String>();
Iterator<Entry<String, Integer>> iter = m.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, Integer> entry = iter.next();
String a = entry.getKey().substring(0, 3);
array1.add(a);
}
Map<String, Integer> map1 = count(array1);
return map1;
}
}
车辆CAN测试小代码
于 2022-02-28 20:31:02 首次发布