Java Regix试图从文本文件读取子字符串

Java Regix试图从文本文件读取子字符串,java,text,Java,Text,我试图从一篇充满垃圾的文章中读到一些有用的信息,但这是一些传感器的读数。我从这段代码中丢失了很多有用的信息 比如“NH3级” l是:9.9977' 一定有比这更有效的方法有人能帮我吗 import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class sensorclean { final static String Array[] = new String[1000]

我试图从一篇充满垃圾的文章中读到一些有用的信息,但这是一些传感器的读数。我从这段代码中丢失了很多有用的信息

比如“NH3级” l是:9.9977'

一定有比这更有效的方法有人能帮我吗

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class sensorclean {
final static String Array[] = new String[1000];
    static int g = 0;

public static void main(String[] args) {

File file = new File("C:/Users/Omar/Desktop/datatest.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String newline=ignoreComments(line);
if(newline!=null)
    Array[g] = newline;
    g++;
}

for(int i =0; i<Array.length;i++){
    if(Array[i]!=null)

    {

        Array[i] = Array[i].trim();

    System.out.println(Array[i]);

    }
}

}

 catch (FileNotFoundException e) 
{
e.printStackTrace();
}
}
private static String ignoreComments(String line) {
String result_line=null;

int upto=line.indexOf('#');
int upto1 = line.indexOf('ë');
int upto2 = line.indexOf('~');
int upto3 = line.indexOf('€');
int upto4 = line.indexOf('?');
if((upto!=0&&upto>0)&&(upto1!=0&&upto1>0)){
result_line=line.substring(1, upto4);
System.out.println("here");
}
else{
if(upto<0 && upto1<0 && upto2<0 && upto3<0 ){
result_line=line;
}/*else{
result_line="";
}*/
}
return result_line;

}
}
我的传感器读取温度并将其存储在.txt文件中。但它增加了垃圾 我正在开发一个从中提取有用信息的java

这是文件中内容的示例

ë^€3¢iw4R¢3¢iw CO水平为:101.0831,CO2水平为:375.2046,NH3水平 l is:9.9977?~O€)3¢@isGR -mac:0013A20040691673,-时间:2014年12月11日星期三- 14:06.56,例如€3¢isGR}3¢is 温度:51.9354,湿度:9.6129,蝙蝠:63%

~3¢isGR}3¢is CO水平为:106.1330,CO2水平为:374.7616,NH3水平 l为:86.7625欧元~O€}3美分@if:R -mac:0013A20040691666,-时间:2014年12月11日星期三 -14:09.20,欧元3美分@如果:R}3美分@如果 温度:280.0000,湿度:17.7677,蝙蝠: 96% 如果:如果 CO水平为:128.8912,CO2水平为:375.6922,NH3水平 l is:9.9977欧元~O}3第二欧元@iw2R -mac:0013A20040691677,-时间:2014年12月11日星期三- 14:12.11,?H€}3¢iw4R}3¢iw 温度:20.3225,湿度:19.3161,bat:87 % ?3¢iw1R¢3¢iw CO水平为:101.0831,CO2水平为:375.1160,NH3水平 l:9.9977?

这种垃圾不总是一样的,它在变化


这是我当前的代码

它不是基于正则表达式的,仍然:

public static void main(String[] args) throws Exception {
    StringBuilder tmp = new StringBuilder();
    StringBuilder res = new StringBuilder();
    Scanner sc = new Scanner(new File("test.txt"));
    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        boolean isRubbish = false;
        for (char c : line.toCharArray()) {
            if (c == ' ') {
                if (!isRubbish) {
                    res.append(tmp).append(' ');
                } else {
                    isRubbish = false;
                }
                tmp.setLength(0);
            } else if (isRubbish(c)) {
                isRubbish = true;
            } else {
                tmp.append(c);
            }
        }
    }
    System.out.println(res);
}

private static boolean isRubbish(char c) {
    return "#^}@?".indexOf(c) > -1;
}

您可能希望在发布之前阅读网站常见问题解答,因为它会告诉您如何正确格式化代码,使其实际上可读。文件的第一行是NH3 leve,第二行是l:9.9977吗?或者中间有空格吗?没有,只是行的不同对不起,我找不到一个方法按原样发布。看起来你的文件中混合了二进制和ASCII数据。在一个六角编辑器中,尝试在一个六角编辑器中查看数据,看看垃圾是否看起来像时间戳、长度或消息ID。你看到这是事情,当我把代码修改到这个私有静态布尔的代码时,你看到这是事情,当我把代码改成这个私有的代码时,你看到这是事情。你看到这是事情,当我尝试在一个六看看看数据。试试试试试看看看看看看数据的数据,在在一尝试,在在一尝试的数据的数据。尝试,尝试尝试尝试在在在在一尝试,尝试尝试在一尝试,尝试在一数据的数据的数据,在一尝试在六,在一尝试在六,尝试尝试在六,尝试尝试在六,尝试尝试在六,尝试尝试在六,尝试在六,尝试在六,尝试尝试在一在一在一在六,尝试尝试在六,尝试在六,尝试尝试在一在一在六,在一在在六,在六,尝试尝试在六,尝试在一在六,尝试在六,在);}我的输出是这样的3iw4R3iw CO水平是:101.0831,CO2水平是:375.2046,NH3水平是:9.997他们在一条线上,这是好的,但它清除了垃圾,但垃圾有有效的数字和字符,我不需要它们仍然没有发出干净的文本