1

単語などの感情的な表記を含む文字列を解析したい":)",":p","!","?"。たとえば、この文字列"How dare you! You have lost him two days ago:'("のように、次のような結果を取得したい:

How
dare
you
!
You
have
lost
him
two
days
ago
:'(

以前はセパレーターを使用StringTokenizerして文を解析していましたが、感情的な表記が失われました。ありがとう

私が使用するコード:

public class FullParser {
    private String sentence;
    private String separator="' ,.:!()@/<>";

    private ArrayList<String> mywords;

    public FullParser(String sentence){
        this.sentence=sentence;
        mywords=new ArrayList<String>();
        separator+='"';
    }
    public void parsing(){
        StringTokenizer st = new StringTokenizer( sentence, separator, true );

        while ( st.hasMoreTokens() ) {
            String token = st.nextToken();
            if (!( token.length() == 1 && separator.indexOf( token.charAt( 0 ) ) >= 0 )) {
                //Log.i("PARSER",token);                
                mywords.add(token);
            }
        }
    }
    public ArrayList<String> getmyWords(){
        return mywords;
    }
4

3 に答える 3

0

できることは、すべての感情表記を配列に格納することです。実行中に正規表現を避けるために、特殊文字をエスケープする必要がありますreplaceAll。この後、すべての感情をループし、文中に存在する感情の前にスペースを追加します。

これは、後でスペースで文を分割するのに役立ちます。また、導入された可能性のある二重スペースを削除することもできます。

以下のコードを参照してください (テストされていないため、文法上の誤りがある可能性があります)

private static final String SPACE =" ";
String[]  emotionList = new String[]{':P',':)','!',....};//you might need to handle :) as :\\) to escape regex 

public void parsing(){
   for(String s:emotionList){ //add space before each emotion.
      sentence=sentence.replaceAll(s,SPACE+s);
   }

   sentence=sentence.replaceAll(SPACE+SPACE, SPACE);//optional - replace double SPACE by single SPACE.
   mywords = Arrays.asList(sentence.split(SPACE));
}
于 2013-05-17T09:14:00.237 に答える
0

理想的には、正規表現を使用することをお勧めしますが、本当に多くの直喩/表現を使用したい場合は、複雑な正規表現パターンを適用する必要があります。(毎日の使用で見つけることができる 100 以上の笑顔)。

可能性のある式/スマイリーを ArrayList に String として格納し、指定された文字列で arrayList 要素を検索して式を見つけ、新しい行を追加することができます。例として:

          //initialisation - can be done once on startup/value can be fetch from db
        ArrayList<String> list = new ArrayList<String>() ;
    list.add(":)");
    list.add("!");
    list.add("?");

    // When ever you want to parse the String
    String input=" Hello :) How are you ? I am :) not fine! ha ha!";
    System.out.println(input);
    for(String exp:list){
        input = input.replace(exp, "\n"+exp+"\n");
    }
    System.out.println(input);
于 2013-05-17T09:06:58.300 に答える