Java 找到单词时如何断开字符串
我的字符串对象中有一个数据,如下所示Java 找到单词时如何断开字符串,java,string,Java,String,我的字符串对象中有一个数据,如下所示 Scanner Inlist 1,2,3 Resolved scan set NotEqual to Non Scan Set Area of intrest equal to Total Intrest Initial responder Inlist enter values 现在,当我阅读每一行时,如果我发现了单词(Inlist,NotEqual,Inlist),那么它需要打断这一行,并需要重新阅读下一行 Output would be:
Scanner Inlist 1,2,3
Resolved scan set NotEqual to Non Scan Set
Area of intrest equal to Total Intrest
Initial responder Inlist enter values
现在,当我阅读每一行时,如果我发现了单词(Inlist,NotEqual,Inlist),那么它需要打断这一行,并需要重新阅读下一行
Output would be:
Scanner
Resolved scan set
Area of intrest
Initial responder
到目前为止,我所尝试的是
String filterstringobj=promtchild.toString();
StringTokenizer str=new StringTokenizer(filterstringobj,"");
while(str.hasMoreTokens())
{
String Inlistremove=str.nextToken("InList");
if(Inlistremove.length()!=0)
{
System.out.println(Inlistremove);
if(Inlistremove.equalsIgnoreCase("InList") &&
Inlistremove.equalsIgnoreCase("NotEqual") &&
Inlistremove.equalsIgnoreCase("Equal")
)
{
System.out.println(Inlistremove);
}
}
}
使用此行:
StringTokenizer str=new StringTokenizer(filterstringobj," ");
而不是
StringTokenizer str=new StringTokenizer(filterstringobj,"");
编辑好,然后观看以下演示代码:
import java.util.StringTokenizer;
class WordsFromString
{
public static void main(String st[])
{
String data = "Scanner Inlist 1,2,3\n"+
"Resolved scan set NotEqual to Non Scan Set\n"+
"Area of intrest equal to Total Intrest\n"+
"Initial responder Inlist enter values";
StringTokenizer tokenizer = new StringTokenizer(data,"\n",true);
StringBuilder output = new StringBuilder();
while (tokenizer.hasMoreElements())
{
String sLine = tokenizer.nextToken();
StringTokenizer tokenizerWord = new StringTokenizer(sLine," ",true);
while (tokenizerWord.hasMoreElements())
{
String word = tokenizerWord.nextToken();
if ("Inlist".equals(word) || "NotEqual".equals(word) || "Inlist".equals(word) || "equal".equals(word))
{
break;
}
else
{
output.append(word);
}
}
}
System.out.println(output.toString());
}
}
你的逻辑有一个很大的缺陷: 看看你的
如果
我明白了
if(Inlistremove.equalsIgnoreCase("InList")&&Inlistremove.equalsIgnoreCase("NotEqual")&&...
Inlistremove
怎么可能同时等于“InList”
和等于“NotEqual”
?您是在找还是?这将是|
您不需要使用StringTokenizer。
请看看为什么
代替StringTokenizer,您可以使用正则表达式匹配字符串中不需要的部分,并用空字符串替换它们。代码中有三个问题:
StringTokenizer str=new StringTokenizer(filterstringobj,"");
应该是哪一个
StringTokenizer str=new StringTokenizer(filterstringobj," ");
第二点是:
if(Inlistremove.equalsIgnoreCase("InList") &&
Inlistremove.equalsIgnoreCase("NotEqual") &&
Inlistremove.equalsIgnoreCase("Equal")
)
应该是:
if(Inlistremove.equalsIgnoreCase("InList") ||
Inlistremove.equalsIgnoreCase("NotEqual") ||
Inlistremove.equalsIgnoreCase("Equal")
)
第三个问题是,如何移动到字符串数组的下一行?您必须稍微更改代码以合并移动到另一个要分析的字符串
为此,我建议您创建一个函数:
public static void Parse(String s){
String filterstringobj=s;
StringTokenizer str=new StringTokenizer(filterstringobj," ");
while(str.hasMoreTokens())
{
String Inlistremove=str.nextToken("InList");
if(Inlistremove.length()!=0)
{
System.out.println(Inlistremove);
if(Inlistremove.equalsIgnoreCase("InList") ||
Inlistremove.equalsIgnoreCase("NotEqual") ||
Inlistremove.equalsIgnoreCase("Equal")
)
{
System.out.println(Inlistremove);
return;
}
}
}
}
在main()
方法中,您可以执行以下操作:
public static void main(String[] args)
{
String[] array = new String[3];
array[0] = "Resolved scan set NotEqual to Non Scan Set";
array[1] = "Area of intrest equal to Total Intrest";
array[2] = "Initial responder Inlist enter values";
for(int i = 0; i < 3; i++) {
Parse(array[i]);
}
}
publicstaticvoidmain(字符串[]args)
{
字符串[]数组=新字符串[3];
数组[0]=“解析的扫描集NotEqual为非扫描集”;
数组[1]=“整数的面积等于整数的总面积”;
数组[2]=“初始响应程序在列表中输入值”;
对于(int i=0;i<3;i++){
解析(数组[i]);
}
}
非常灵活,只有一行:
public static String parseLine(String line){
return line.replaceAll("(?i)(inlist|notequal|equal).*", "");
}
public static void main(String[] a){
System.out.println(parseLine("Resolved scan set NotEqual to Non Scan Set"));
System.out.println(parseLine("Area of intrest equal to Total Intrest"));
System.out.println(parseLine("Initial responder Inlist enter values"));
}
将打印:
解析扫描集
兴趣区
初始响应者总数
-1你应该把它作为一个评论,它没有回答这个问题真的很糟糕的想法,它没有取代,它是关于忽略。我还不能添加评论。我只能在自己的答案中添加注释。@fmsf第二段回答了这个问题,即在匹配关键字后,在打印之前删除行尾。。。尽管它当然可以提供regexp来实现这一点。第一段还提出了一个关于StringTokenizer
的非常有效的观点,并提供了支持链接。我也试过了,它只是在断章取义。但是我希望在找到字符串分隔符之前读取数据。如何实现?filterstringobj
存储的是什么?它存储列表1,2,3中的字符串数据扫描程序已解析扫描集NotEqual到intrest的非扫描集区域,等于列表中intrest初始响应程序的总输入值