我有一个txt
文件,它有超过1000行文本,开头有一些整数。如:
22Ahmedabad, AES Institute of Computer Studies
526Ahmedabad, Indian Institute of Managment
561Ahmedabad, Indus Institute of Technology & Engineering
745Ahmedabad, Lalbhai Dalpatbhai College of Engineering
我想将所有行存储在另一个文件中,不包含整数。我写的代码是:
while (s.hasNextLine()){
String sentence=s.nextLine();
int l=sentence.length();
c++;
try{//printing P
FileOutputStream ffs = new FileOutputStream ("ps.txt",true);
PrintStream p = new PrintStream ( ffs );
for (int i=0;i<l;i++){
if ((int)sentence.charAt(i)<=48 && (int)sentence.charAt(i)>=57){
p.print(sentence.charAt(i));
}
}
p.close();
}
catch(Exception e){}
}
但是输出一个空白文件
您的代码中有几处需要改进:
- 不要每一行都重新打开输出文件。一直开着就行了。
- 你要删除所有的数字,而不仅仅是开始的数字-这是你的意图吗?
- 你知道有哪个数字同时是
<= 48
和>= 57
吗? -
Scanner.nextLine()
不包括行返回,所以你需要在每行之后调用p.println()
。
试试这个:
// open the file once
FileOutputStream ffs = new FileOutputStream ("ps.txt");
PrintStream p = new PrintStream ( ffs );
while (s.hasNextLine()){
String sentence=s.nextLine();
int l=sentence.length();
c++;
try{//printing P
for (int i=0;i<l;i++){
// check "< 48 || > 57", which is non-numeric range
if ((int)sentence.charAt(i)<48 || (int)sentence.charAt(i)>57){
p.print(sentence.charAt(i));
}
}
// move to next line in output file
p.println();
}
catch(Exception e){}
}
p.close();
您可以将此正则表达式应用于从文件中读取的每行:
String str = ... // read the next line from the file
str = str.replaceAll("^[0-9]+", "");
正则表达式^[0-9]+
匹配行首的任意数字。replaceAll
方法用空字符串替换匹配项
在mellamokb注释之上,您应该避免使用"魔术数字"。不能保证这些数字将落在ASCII码的预期范围内。
您可以使用Character.isDigit
String value = "22Ahmedabad, AES Institute of Computer Studies";
int index = 0;
while (Character.isDigit(value.charAt(index))) {
index++;
}
if (index < value.length()) {
System.out.println(value.substring(index));
} else {
System.out.println("Nothing but numbers here");
}
(Nb dasblinkenlight已经发布了一些优秀的正则表达式,这可能更容易使用,但如果你喜欢,regexp把我的大脑里外:p)