我有一个字符串,里面有分隔符。我想知道用新行替换分隔符的最佳方法。我在使用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>
输出
答案 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);
}
因为您的条件仅适用于偶数个元素。