0

区切り文字を含む文字列があります。区切り文字を新しい行に置き換える最良の方法を知りたいです。String Tokenizer の使用に関してさまざまな問題がありました。主な問題は NoSuchElementException です。基本的に、これまでの私のアプローチは、データベースからデータを取得することです これが達成されたら、各レコードを文字列に保存します これが String question = c.getString(1); 文字列トークナイザー StringTokenizer st = new StringTokenizer(question,"<ENTER>");です while ループを使用してトークンをループします

 while (st.hasMoreTokens()) {
                        System.err.println(st.nextToken());
                       // quest.setText(String.valueOf(st.nextToken("<ENTER>")));

            }

コードでの作業例

String in = "What is the output of: <ENTER><ENTER>echo 6 % 4;"; 

            in=in.substring(in.indexOf("<ENTER>")+7,in.lastIndexOf("<ENTER>"));
            String[] mSplitted= in.replaceAll("<ENTER><ENTER>", "<ENTER>").split("<ENTER>");

            for(int i=0;i<mSplitted.length;i++)
            {
                System.out.println("values: "+mSplitted[i]);
                quest.setText(String.valueOf(mSplitted[i]));
}

xml コード

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/quest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="false"
        android:text="TextView" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.08"
        android:text="@string/hello" />

    <Button
        android:id="@+id/Next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

出力

ここに画像の説明を入力

4

2 に答える 2

2

Stringsplit()を使用できませんか。

String in = "<ENTER>title=Java-Samples<ENTER>" + 
            "<ENTER>author=Emiley J<ENTER>" + 
            "<ENTER>publisher=java-samples.com<ENTER>" + 
            "<ENTER>copyright=2007<ENTER>"; 

in=in.substring(in.indexOf("<ENTER>")+7,in.lastIndexOf("<ENTER>"));
String[] mSplitted= in.replaceAll("<ENTER><ENTER>", "<ENTER>").split("<ENTER>");
String mFinal="";

for(int i=0;i<mSplitted.length;i++)
{
   System.out.println("values: "+mSplitted[i]);
   mFinal= mFinal+ mSplitted[i];
}
quest.setText(mFinal);
于 2012-06-09T06:02:09.800 に答える
0

背後にNoSuchElementExceptionある理由は、トークナイザーにさらにトークンがあるかどうかを確認しているためですが、ある場合は、同時に 2 つのトークンを読み取っていることになります。

ドキュメントにはhasMoreTokens、このトークナイザーの文字列から利用可能なトークンが他にもあるかどうかをテストすると書かれています。このメソッドが true を返す場合、引数なしで を呼び出すとnextToken()、トークンが正常に返されます。

つまりhasMoreTokens、次のトークンについてのみ確認できますが、その次のトークンについては確認できません!

あなたの状態は..

while(st.hasMoreTokens()) { 
              String key = st.nextToken(); 
              String val="";
              if(st.hasMoreTokens())
                val = st.nextToken();  
            System.out.println(key + "\n" + val); 
        }

あなたの条件は偶数の要素に対してのみ機能するためです。

于 2012-06-09T06:20:37.033 に答える