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
}
也可以用磨让正则表达式之类的,第三方类库等等都可以
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)