android用新行替换分隔符

时间:2012-06-09 05:56:18

标签: android stringtokenizer

我有一个字符串,里面有分隔符。我想知道用新行替换分隔符的最佳方法。我在使用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>

输出

enter image description here

2 个答案:

答案 0 :(得分:2)

您无法使用 String split()

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);

答案 1 :(得分:0)

NoSuchElementException背后的原因是你正在检查你的Tokenizer是否有更多的令牌,但是如果它有,那么你正在同时阅读两个令牌。

文档说hasMoreTokens测试此tokenizer的字符串中是否有更多可用的标记。      如果此方法返回true,则后续调用nextToken()且不带参数将成功返回令牌。

这意味着hasMoreTokens只能确定下一个令牌而不是旁边的令牌!

你的病情应该是......

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

因为您的条件仅适用于偶数个元素。