我想获取字符串的第一个单词并将其保存到变量中。我知道如果您知道要分割的内容,string.split()
方法有效。难以理解的是,我所拥有的弦乐并不总是一样的。以下是一些示例字符串,我想要保存的是粗体。
那么我可以使用哪些东西来满足我在这里的5个例子吗?或者我是否必须手动搜索每一个并以这种方式处理它?</ p>
我在想的是检查我得到的每个字符串的格式。因此,如果字符串没有逗号(2号和3号),则取整个字符串;如果它有逗号,则拆分第一个非字母字符(如空格或逗号)。然而,最后一个不会说不。 5因为我也想要整个字符串。
感谢您的帮助。
答案 0 :(得分:2)
你要做的事情基本上是不可能的,因为你列出的名字没有共同的模式。单独的最后一个例子会破坏事物,因为它在单词中包含空格和逗号,而其他示例需要在空格和逗号上打破!
我能想到可靠的唯一方法是使用您正在使用的化学名称/单词/等词典,然后您可以检查该词典,直到找到匹配为止。
将字典存储在HashSet
或HashMap
中,您可以快速检查匹配项,只需扫描字符串即可查找第一个非字母数字字符串。检查到目前为止找到的内容是否在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,它返回单词或标点字符开头的索引,并在连续调用中移动文本。循环只是通过使用迭代器返回的当前位置和先前位置来提取单词,标点符号将被提取为单独的单词。