Java 从字符串中提取字符串

Java 从字符串中提取字符串,java,string,extract,Java,String,Extract,我从一封电子邮件的正文中提取了这个字符串 "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien" 我想提取字符串“712222222”,“紧急”和“rien” 我尝试过类扫描程序,但它不起作用 在Java中,哪种解决方案最好?试试这个 String text = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien"; String[]lines = text.replace(": ", ":

我从一封电子邮件的正文中提取了这个字符串

"DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien"
我想提取字符串
“712222222”
“紧急”
“rien”

我尝试过类扫描程序,但它不起作用

在Java中,哪种解决方案最好?

试试这个

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());
}
试试这个

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());
}

可以使用正则表达式,如下所示:

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));
}
String s=“#目的地:712222\n”+
“#优先级:紧急\n”+
“#AUTRE:rien”;

Pattern p=Pattern.compile((?您可以使用正则表达式,如下所示:

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));
}
String s=“#目的地:712222\n”+
“#优先级:紧急\n”+
“#AUTRE:rien”;

Pattern p=Pattern.compile(“(?试试这个。它使用正则表达式将字符串按空格(\s)分割)


尝试此操作。它使用正则表达式将字符串拆分为空白(\s)


更正:当问题第一次出现在包含换行符的输入字符串中时。现在看起来问题已被编辑以删除换行符。如果它们不再存在,则我的解决方案将无法工作

我的第一个想法是编写一个解析例程,创建一个键/值对映射,然后您可以按名称获取数据段,而字符串中的顺序并不重要

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"));

    }
}
import java.util.HashMap;
导入java.util.Map;
班长
{
/**
*此方法将字符串“key:value”对解析为map.Parameter
*线对由新线分隔。
*要分析的字符串中的@param
*@返回数据地图
*/
静态映射参数(字符串输入){
Map params=新的HashMap();
int pos=0;

while(pos更正:当问题第一次出现在包含换行符的输入字符串中时。现在看起来问题已被编辑以删除换行符。如果它们不再存在,则我的解决方案将无法工作

我的第一个想法是编写一个解析例程,创建一个键/值对映射,然后您可以按名称获取数据段,而字符串中的顺序并不重要

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"));

    }
}
import java.util.HashMap;
导入java.util.Map;
班长
{
/**
*此方法将字符串“key:value”对解析为map.Parameter
*线对由新线分隔。
*要分析的字符串中的@param
*@返回数据地图
*/
静态映射参数(字符串输入){
Map params=新的HashMap();
int pos=0;
而(pos您完全可以使用a来提取您需要的信息:

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
您完全可以使用a提取所需的信息:

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

每个问题末尾是否有换行符?请看。欢迎来到Stack Overflow!我们鼓励您。如果您有,请将其添加到问题中-如果没有,请先研究并尝试您的问题,然后再回来。您是如何使用Scanner的?看起来Scanner可以用于此…每个问题末尾是否有换行符?有一个look at.欢迎使用Stack Overflow!我们鼓励您这样做。如果您有,请将其添加到问题中-如果没有,请先研究并尝试您的问题,然后返回。您是如何使用Scanner的?似乎Scanner可以用于此…新行可能无法保证“\n”可能是“\r”电子邮件字符串已被更改。新行可能无法保证为“\n”或“\r”。电子邮件字符串已被更改