2

したがって、テキスト ファイル内の文字列を検索できますが、この ArrayList 内でデータを並べ替えて、アルゴリズムを実装したいと考えていました。テキスト ファイルから読み取り、テキスト ファイル内の値 [文字列] を文字列 [] 配列に格納することは可能ですか。

また、ストリングスを分離することは可能ですか? だから私の配列の代わりに:

[Alice was beginning to get very tired of sitting by her sister on the, bank, and of having nothing to do:]

次のように配列にすることは可能ですか:

["Alice", "was" "beginning" "to" "get"...]

.

    public static void main(String[]args) throws IOException
    {
        Scanner scan = new Scanner(System.in);
        String stringSearch = scan.nextLine();

        BufferedReader reader = new BufferedReader(new FileReader("File1.txt"));
        List<String> words = new ArrayList<String>();

        String line;
        while ((line = reader.readLine()) != null) {                
            words.add(line);
        }

        for(String sLine : words) 
        {
            if (sLine.contains(stringSearch)) 
            {
                int index = words.indexOf(sLine);
                System.out.println("Got a match at line " + index);

            }
         }

        //Collections.sort(words);
        //for (String str: words)
        //      System.out.println(str);

        int size = words.size();
        System.out.println("There are " + size + " Lines of text in this text file.");
        reader.close();

        System.out.println(words);

    }
4

2 に答える 2

4

行を単語の配列に分割するには、次を使用します。

String words = sentence.split("[^\\w']+");

正規表現[^\w']は、「単語の文字やアポストロフィではない」ことを意味します

これにより、「can't」などのアポストロフィが埋め込まれた単語がキャプチャされ、すべての句読点がスキップされます。

編集:

コメントは、 などの引用された単語を解析するエッジ ケースを発生させ'this'ましたthis
そのための解決策は次のとおりです。最初にラッピング引用符を削除する必要があります。

String[] words = input.replaceAll("(^|\\s)'([\\w']+)'(\\s|$)", "$1$2$3").split("[^\\w']+");

エッジケースとコーナーケースのテストコードを次に示します。

public static void main(String[] args) throws Exception {
    String input = "'I', ie \"me\", can't extract 'can't' or 'can't'";
    String[] words = input.replaceAll("(^|[^\\w'])'([\\w']+)'([^\\w']|$)", "$1$2$3").split("[^\\w']+");
    System.out.println(Arrays.toString(words));
}

出力:

[I, ie, me, can't, extract, can't, or, can't]
于 2013-01-09T00:38:48.463 に答える
4

また、ストリングスを分離することは可能ですか? はい、これを空白に使用して文字列を分割できます。

 String[] strSplit;
 String str = "This is test for split";
 strSplit = str.split("[\\s,;!?\"]+");

文字列 API を参照

さらに、テキストファイルを単語単位で読むこともできます。

 Scanner scan = null;
 try {
     scan = new Scanner(new BufferedReader(new FileReader("Your File Path")));
 } catch (FileNotFoundException e) {
     e.printStackTrace();
 }

 while(scan.hasNext()){
     System.out.println( scan.next() ); 
 }

スキャナ API を参照

于 2013-01-09T00:11:05.117 に答える