Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找到单词时如何断开字符串_Java_String - Fatal编程技术网

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初始响应程序的总输入值