获取字符串的第一个单词?

时间:2014-01-04 00:59:57

标签: java regex string split

我想获取字符串的第一个单词并将其保存到变量中。我知道如果您知道要分割的内容,string.split()方法有效。难以理解的是,我所拥有的弦乐并不总是一样的。以下是一些示例字符串,我想要保存的是粗体。

  1. LEAD ,UNFILTERED TOTAL”
  2. PH(-LOG H + CONCN)
  3. STREAM CONDITION
  4. NITRATES TOTAL,UNFIL.REAC”
  5. 四氯苯1,2,3,4 ”< - 这是一个化学名称
  6. 那么我可以使用哪些东西来满足我在这里的5个例子吗?或者我是否必须手动搜索每一个并以这种方式处理它?<​​/ p>

    我在想的是检查我得到的每个字符串的格式。因此,如果字符串没有逗号(2号和3号),则取整个字符串;如果它有逗号,则拆分第一个非字母字符(如空格或逗号)。然而,最后一个不会说不。 5因为我也想要整个字符串。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

你要做的事情基本上是不可能的,因为你列出的名字没有共同的模式。单独的最后一个例子会破坏事物,因为它在单词中包含空格和逗号,而其他示例需要在空格和逗号上打破!

我能想到可靠的唯一方法是使用您正在使用的化学名称/单词/等词典,然后您可以检查该词典,直到找到匹配为止。

将字典存储在HashSetHashMap中,您可以快速检查匹配项,只需扫描字符串即可查找第一个非字母数字字符串。检查到目前为止找到的内容是否在Set中,如果没有重复此过程继续扫描,直到找到匹配或用完String

答案 1 :(得分:0)

试试这个:

       String  lines[]= {"LEAD, UNFILTERED TOTAL","PH(-LOG H+ CONCN)","STREAM CONDITION","NITRATES TOTAL, UNFIL.REAC","TETRACHLOROBENZENE 1,2,3,4"};
       String COMMA=",";
       String REGEX="(^(\\w|\\+|\\-|\\(|\\))+(\\W?,?\\d)*)";
       Pattern res=Pattern.compile(REGEX);
       Pattern resComma=Pattern.compile(COMMA);
       Matcher match;
       for(String line:lines){
         if(!resComma.matcher(line).find()){
          System.out.println(" RESULT "+ line);  
         }
         else if ((match=res.matcher(line)).find())
          System.out.println(" RESULT "+ match.group());
       }

答案 2 :(得分:0)

您可以使用中断迭代器 - java.text.BreakIterator,而不是尝试使用正则表达式。

要获取字符串中的单词,请使用:

BreakIterator iter = BreakIterator.getWordInstance();

iter.setText(text);

for (int loc = iter.first(), lastLoc = 0; loc != BreakIterator.DONE; loc = lastLoc, loc = iter.next)
 {
    if (loc == 0)
       continue;

    String word = text.substring(lastLoc, loc);
 }

Break迭代器用于在文本中查找“边界” - 可能是单词或句子或其他内容。上面的示例使用预定义的单词break iterator,它返回单词或标点字符开头的索引,并在连续调用中移动文本。循环只是通过使用迭代器返回的当前位置和先前位置来提取单词,标点符号将被提取为单独的单词。