我需要根据条件获取字符串的子字符串。
String str = "ABC::abcdefgh||XYZ::xyz";
如果输入为“ABC”,请检查它是否包含在str中,如果它出现,则应该打印abcdefgh。 同样,如果输入是“XYZ”,那么它应该打印xyz。
如何在java中使用字符串操作实现此目的?
答案 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)
使用contains方法查看它是否包含子字符串:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains%28java.lang.CharSequence%29
答案 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开头,然后打印结果。您可以根据自己的需要进行更改。