我从电子邮件正文中提取了这个字符串
"DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien"
我希望提取字符串"71222222"
,"urgent"
和"rien"
。
我尝试过扫描仪类,但它没有用。
在Java中使用它的最佳解决方案是什么?
答案 0 :(得分:3)
您可以使用正则表达式,如下所示:
String s = "#DESTINATION: 71222222\n"+
"#PRIORITY: urgent\n"+
"#AUTRE: rien";
Pattern p = Pattern.compile("(?<=: )[^ ]+$", Pattern.MULTILINE);
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group(0));
}
此解决方案的核心是这个正则表达式:(?<=: )[^ ]+$
。它匹配冒号+空格": "
序列一直到行$
末尾的非空格字符序列。
关于ideone的演示:link。
答案 1 :(得分:1)
试试这个
String text = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";
String[]lines = text.replace(": ", ":").split(" ");
String[]values = new String[lines.length];
int i=0;
for(String line : lines){
values[i++] = line.split(":")[1];
}
System.out.println(Arrays.toString(values));
输出
[ 71222222, urgent, rien]
你也可以试试这个
String text = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";
StringTokenizer tokinizer = new StringTokenizer(text,": ");
while(tokinizer.hasMoreTokens()) {
tokinizer.nextToken(); //skip first
System.out.println(tokinizer.nextToken());
}
答案 2 :(得分:1)
您绝对可以使用Scanner来提取所需信息:
final String input = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";
final Scanner scanner = new Scanner(input).useDelimiter("\\w+: ");
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
打印:
71222222
urgent
rien
答案 3 :(得分:0)
试试这个。它使用正则表达式将字符串分隔为空格(\ s)
String str = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";
String[] split = str.split("\\s");
System.out.println(split[1]+" - "+split[3]+" - "+split[5]);
答案 4 :(得分:0)
更正:当输入字符串中首次出现问题时,包括换行符。现在看起来已经编辑了一个问题来删除换行符。如果它们不再存在,那么我的解决方案将无效。
我的第一个想法是编写一个解析例程来创建键/值对的映射。然后,您可以按名称获取数据片段,字符串中的顺序无关紧要。
import java.util.HashMap;
import java.util.Map;
class Main
{
/**
* This method parses a string of "key:value" pairs into a map. Parameter
* pairs are separated by new-lines.
* @param in the string to parse
* @return the data map
*/
static Map<String,String> parseParameters(String in) {
Map<String,String> params = new HashMap<String,String>();
int pos = 0;
while(pos<in.length()) {
int i = in.indexOf("\n",pos);
if(i<0) i=in.length();
String sub = in.substring(pos,i);
pos = i+1;
int j = sub.indexOf(":");
if(j>=0) {
String key = sub.substring(0,j).trim();
String val = sub.substring(j+1).trim();
//System.out.println(key+":"+val);
params.put(key,val);
}
}
return params;
}
public static void main( String args[] )
{
String in = "#DESTINATION: 71222222\n#PRIORITY: urgent\n#AUTRE: rien";
Map<String,String> params = parseParameters(in);
// Get the data pieces by name
System.out.println(params.get("#AUTRE"));
System.out.println(params.get("#DESTINATION"));
System.out.println(params.get("#PRIORITY"));
}
}