java读取txt文件,如何过滤掉注释以及空格

java读取txt文件,如何过滤掉注释以及空格,第1张

import java.io.RandomAccessFile

/**

 * 格式

 * 

 *

 * <p>

 *

 * @author cs12110 2018年11月16日

 * @see

 * @since 1.0

 */

public class FormatText {

public static void main(String[] args) {

try {

RandomAccessFile acf = new RandomAccessFile("d://FormatText.java", "r")

String line

boolean isComment = true

while (null != (line = acf.readLine())) {

// 去除前后空格

// line.trim()

String noneSpaceLine = removeAllSpace(line)

// 简单的注解

if (isSimpleComment(noneSpaceLine)) {

continue

}

// 多行注解

if (noneSpaceLine.startsWith("/*")) {

isComment = true

}

if (isComment && noneSpaceLine.endsWith("*/")) {

isComment = false

continue

}

if (!isComment) {

System.out.println(noneSpaceLine)

}

}

acf.close()

} catch (Exception e) {

e.printStackTrace()

}

}

private static boolean isSimpleComment(String line) {

if (line.startsWith("//")) {

return true

}

return false

}

/**

 * 注意: 这里移除所有的空格,如果只想移除前后两端的,请使用: line.trim()

 * 

 * @param line

 *            行

 * @return String

 */

private static String removeAllSpace(String line) {

StringBuilder b = new StringBuilder(line.length())

for (char ch : line.toCharArray()) {

int num = (int) ch

if (num != 9 && num != 32) {

b.append(ch)

}

}

return b.toString()

}

}

测试数据为上面的java文件,测试结果如下

publicclassFormatText{

publicstaticvoidmain(String[]args){

try{

RandomAccessFileacf=newRandomAccessFile("d://FormatText.java","r")

Stringline

while(null!=(line=acf.readLine())){

StringnoneSpaceLine=removeAllSpace(line.trim())

if(isSimpleComment(noneSpaceLine)){

continue

}

System.out.println(noneSpaceLine)

}

acf.close()

}catch(Exceptione){

e.printStackTrace()

}

}

privatestaticbooleanisSimpleComment(Stringline){

if(line.startsWith("//")){

returntrue

}

returnfalse

}

privatestaticStringremoveAllSpace(Stringline){

StringBuilderb=newStringBuilder(line.length())

for(charch:line.toCharArray()){

if(ch!=''){

b.append(ch)

}

}

returnb.toString()

}

}

引用上楼的回答:

Scanner scanner = new Scanner(new File("F:\\*.txt"))

scanner.useDelimiter("\\s")

while(scanner.hasNextInt()){

System.out.println(scanner.nextInt())

}

我再源衡兆给你解释一下:

useDelimiter(Pattern pattern)这个方法是Scanner中用于设置分隔符的,默认情况下scanner分割符是空格,你这个雹租程序中就是用正则表达式来设置分隔符,"\\s*fish\\s*"前面的一个\\s*表示空格出现0次或多次接着出现fish接着出现0个或多个空格,只要scanner扫描遇到的数据符合这个正则表达式,前面的就当一个数据就可以拦缺用Scanner中的next()返回取得数据。

通过这个解释你就可以知道如何利用useDelmiter来消除空格。

readLine方法返回的是字符串,你可以对这个字符串进行判断,按你的态姿要求不为空的才存瞎闭局起来。

if(!"".equals(string)){

your code to store in the DB

}

改进点

if(!"".equals(string)&&!string.trim().equals)("")){

your code to store in the DB

}

也可以用磨让正则表达式之类的,第三方类库等等都可以


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12260317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存