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

你不能使用split()String

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是您正在检查您的 Tokenizer 是否有更多的令牌,但如果有,那么您正在同时读取两个令牌。

文档说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 回答