1

txt先頭にいくつかの整数がある、1,000 行を超えるテキストを含むファイルがあります。お気に入り:

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){}
}

しかし、空のファイルが出力されます。

4

3 に答える 3

5

コードには改善すべき点がいくつかあります。

  1. すべての行で出力ファイルを再度開かないでください。ずっと開いたままにしてください。
  2. 先頭の数字だけでなく、すべての数字を削除しています - それはあなたの意図ですか?
  3. <= 48両方である数を知って>= 57いますか?
  4. 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();
于 2013-01-21T23:07:57.303 に答える
2

ファイルから読み取る各行にこの正規表現を適用できます。

String str = ... // read the next line from the file
str = str.replaceAll("^[0-9]+", "");

正規表現^[0-9]+は、行頭の任意の桁数に一致します。replaceAllメソッドは一致を空の文字列に置き換えます。

于 2013-01-21T23:09:39.250 に答える
0

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)

于 2013-01-21T23:13:22.053 に答える