如何根据条件获取字符串的特定部分?

时间:2014-01-20 22:25:54

标签: java string

我需要根据条件获取字符串的子字符串。

String str = "ABC::abcdefgh||XYZ::xyz";

如果输入为“ABC”,请检查它是否包含在str中,如果它出现,则应该打印abcdefgh。 同样,如果输入是“XYZ”,那么它应该打印xyz。

如何在java中使用字符串操作实现此目的?

4 个答案:

答案 0 :(得分:2)

如果我已经正确猜出了String的格式,那么您可以将其拆分为令牌,如下所示:

String[] tokens = str.split("||");

for(String token : tokens)
{
    // Cycle through each token.


    String key = token.split("::")[0];
    String value = token.split("::")[1];

    if(key.equals(input))
    {
        // input being the user's typed in value.
        return value;
    }
}

但是让我们思考一下。当String是一个更清洁的问题解决方案时,为什么要将其保留在HashMap?将String粘贴到配置文件中,并在加载时 一些代码可以执行类似的任务:

Map<String, String> inputMap = new HashMap<String, String>();

String[] tokens = str.split("||");

for(String token : tokens)
{
    // Cycle through each token.


    String key = token.split("::")[0];
    String value = token.split("::")[1];

    inputMap.put(key, value);
}

然后当用户输入内容时,它就像:

一样简单
return inputMap.get(input);

答案 1 :(得分:1)

您的想法是,您应该使用"::""||"的分隔符拆分字符串,即无论遇到哪个分隔符,都会将其视为分隔符。因此,实现这一目标的最佳方法是使用正则表达式,我认为。

String str = "ABC::abcdefgh||XYZ::xyz";
String[] parts = str.split("[::]|[/||]");

Map<String, String> map = new HashMap<String, String>();

for (int i = 0; i < parts.length - 2; i += 4) {
    if (!parts[i].equals("")) {
        map.put(parts[i], parts[i + 2]);
    }
}

简洁明了,您的代码已准备就绪。 for循环似乎很奇怪,如果有人想出一个更好的正则表达式来分裂(摆脱空字符串),它会变得更干净。我不是正则表达式专家,所以欢迎任何建议。

答案 2 :(得分:0)

答案 3 :(得分:0)

你可以这样做:

    String[] parts = st.split("||");
    if (parts[0].startsWith("ABC")) {
        String[] values = parts[0].split("::");
        System.out.println(values[1]);
    } else {
        if (parts[1].startsWith("XYZ") {
            String[] values = parts[0].split("::");
            System.out.println(values[1]);
        }
    }

如果ABC在那里,上面的代码将首先检查。如果是,它将打印结果然后停止。如果没有,它将检查代码的第二部分,看它是否以XYZ开头,然后打印结果。您可以根据自己的需要进行更改。