java读取txt文件,如何过滤掉注释
比如有一个some.txt文件,内容为:#这是注释行这是注释行#这是注释行~这也是注释行这也是注释行~这也是注释行#这也是注释行~这也是注释行这里是正文这里是正文这里是正...
比如有一个some.txt文件,内容为:
# 这是注释行
这是注释行
# 这是注释行
~这也是注释行
这也是注释行
~这也是注释行
#这也是注释行
~这也是注释行
这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 …………………………………………
读取出来后只有正文部分,注释行统统不要。
哪位达人指点一下,给个思路或源码。
不尽感激!
注释行前#和~分布是不规则的,就是最后一个注释行有~符号。
给个字符的some.txt
~Pfesofesfsefsf
#feofjslfejsf
#---------------------
~ergrh
fsedobe feowfsjao
fegoesdgs fef
~f4eo2gso8ef
#--------- ------- ------
[j[7r[te[t
j6retwerf
~a deof geopd bseep fwef
131 3456 6547 232 242 4234
423 4325 5464 124 432 5436
135 5322 7832 883 216 4236
数字的部分是需要东西,其余的过滤。
等待高手!
并不是所有行都有#和~的!!! 展开
# 这是注释行
这是注释行
# 这是注释行
~这也是注释行
这也是注释行
~这也是注释行
#这也是注释行
~这也是注释行
这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 这里是正文 …………………………………………
读取出来后只有正文部分,注释行统统不要。
哪位达人指点一下,给个思路或源码。
不尽感激!
注释行前#和~分布是不规则的,就是最后一个注释行有~符号。
给个字符的some.txt
~Pfesofesfsefsf
#feofjslfejsf
#---------------------
~ergrh
fsedobe feowfsjao
fegoesdgs fef
~f4eo2gso8ef
#--------- ------- ------
[j[7r[te[t
j6retwerf
~a deof geopd bseep fwef
131 3456 6547 232 242 4234
423 4325 5464 124 432 5436
135 5322 7832 883 216 4236
数字的部分是需要东西,其余的过滤。
等待高手!
并不是所有行都有#和~的!!! 展开
6个回答
展开全部
处理的重点就是如何判断和删除两行注释中间的不是以"#"或者"~"开头的注释行,草草写了段代码,对于楼主给的那段some.txt能够正常处理
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class DelectComments {
public static void main(String rags[]) {
File f = new File("D:\\Hello.txt");
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(f));
boolean flag1 = false;// #
boolean flag2 = false;// ~
String content = "";
// last output content
ArrayList<String> outputContents = new ArrayList<String>();
// the number of lines that between 2 comments lines start with "#" or "~"
int commentsLineNum = 0;
while ((content = br.readLine()) != null) {
// the line is comments and start with "#"
if (content.startsWith("#")) {
// delete the comments lines between 2 comments lines start with "#"
if (flag1) {
for (int i = 0; i < commentsLineNum; i++) {
outputContents.remove(outputContents.size() - 1);
}
commentsLineNum = 0;
} else {
flag1 = true;
}
// the line is comments and start with "~"
} else if (content.startsWith("~")) {
// delete the comments lines between 2 comments lines start with "~"
if (flag2) {
for (int i = 0; i < commentsLineNum; i++) {
outputContents.remove(outputContents.size() - 1);
}
commentsLineNum = 0;
} else {
flag2 = true;
}
} else {
outputContents.add(content);
commentsLineNum++;
}
}
// output the text
for (String outputContent : outputContents) {
System.out.println(outputContent);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
但是还有个问题就是该程序没有考虑到如果在正文以后再次出现注释行的情况,如果用本程序处理的话,就会错误的把正文也作为注释删除,如果有高人的话还望能够不吝赐教。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class DelectComments {
public static void main(String rags[]) {
File f = new File("D:\\Hello.txt");
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(f));
boolean flag1 = false;// #
boolean flag2 = false;// ~
String content = "";
// last output content
ArrayList<String> outputContents = new ArrayList<String>();
// the number of lines that between 2 comments lines start with "#" or "~"
int commentsLineNum = 0;
while ((content = br.readLine()) != null) {
// the line is comments and start with "#"
if (content.startsWith("#")) {
// delete the comments lines between 2 comments lines start with "#"
if (flag1) {
for (int i = 0; i < commentsLineNum; i++) {
outputContents.remove(outputContents.size() - 1);
}
commentsLineNum = 0;
} else {
flag1 = true;
}
// the line is comments and start with "~"
} else if (content.startsWith("~")) {
// delete the comments lines between 2 comments lines start with "~"
if (flag2) {
for (int i = 0; i < commentsLineNum; i++) {
outputContents.remove(outputContents.size() - 1);
}
commentsLineNum = 0;
} else {
flag2 = true;
}
} else {
outputContents.add(content);
commentsLineNum++;
}
}
// output the text
for (String outputContent : outputContents) {
System.out.println(outputContent);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
但是还有个问题就是该程序没有考虑到如果在正文以后再次出现注释行的情况,如果用本程序处理的话,就会错误的把正文也作为注释删除,如果有高人的话还望能够不吝赐教。
推荐于2016-11-21 · 知道合伙人数码行家
关注
展开全部
txt中的注释有// 或者/**/,过滤代码如下:
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
PrintStream writer = new PrintStream(new FileOutputStream("test_new.txt"));
String buf;
while ((buf=reader.readLine()) != null) {
if (buf.isEmpty()) {continue;}
if (buf.matches("[/]+.*")) {
buf = buf.replaceAll("[/]+(.*)", "$1"); //去掉前面的/
}
buf = buf.replaceAll("\\s+(.*)", $1); //去掉前面的空格
writer.println(buf);
}
reader.close();
writer.flush();
writer.close();
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
PrintStream writer = new PrintStream(new FileOutputStream("test_new.txt"));
String buf;
while ((buf=reader.readLine()) != null) {
if (buf.isEmpty()) {continue;}
if (buf.matches("[/]+.*")) {
buf = buf.replaceAll("[/]+(.*)", "$1"); //去掉前面的/
}
buf = buf.replaceAll("\\s+(.*)", $1); //去掉前面的空格
writer.println(buf);
}
reader.close();
writer.flush();
writer.close();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
读取文本按行读取,读取每一行,判断字符,如果前多少个字符符合注释行,则略过。
如果不是,则进行字符串操作。
如果不是,则进行字符串操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java.util.Scanner类可以一次读取一行,
把你不需要的行过滤掉就可以了。
把你不需要的行过滤掉就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//OK 写好的..
import java.io.File;
import java.io.FileReader;
public class Test {
public static void main(String rags[]) {
File f = new File("c:/Hello.txt"); //文件路径
FileReader in;
try {
in = new FileReader (f);
int a=0;
while((a=in.read())!=-1){
if((char)a=='1'||(char)a=='2'||(char)a=='3'||(char)a=='4'||(char)a=='5'||(char)a=='6'||(char)a=='7'||(char)a=='8'
||(char)a=='9'||(char)a=='0'||(char)a==' '||(char)a=='\n') //不要过滤的字符
System.out.print((char)a);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileReader;
public class Test {
public static void main(String rags[]) {
File f = new File("c:/Hello.txt"); //文件路径
FileReader in;
try {
in = new FileReader (f);
int a=0;
while((a=in.read())!=-1){
if((char)a=='1'||(char)a=='2'||(char)a=='3'||(char)a=='4'||(char)a=='5'||(char)a=='6'||(char)a=='7'||(char)a=='8'
||(char)a=='9'||(char)a=='0'||(char)a==' '||(char)a=='\n') //不要过滤的字符
System.out.print((char)a);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询