我读了这个Answers from Stack overflow
尝试了它并且在第一次出现两个字符时工作正常。
这里我有一个像
这样的输入字符串S1:99,78,67,60,75; S2:66,76,56,70,80; S3:89,76,81,70,90;
应根据标识符S%
显示答案。例如,如果用户写入S1,则程序应返回值,直到达到分号。 (在这个例子中它应该是:99,78,67,60,75)。
你能帮我实现这个结果吗?
答案 0 :(得分:1)
使用StringTokenizer回答
String value= "'S1':'99','78','67','60','75';'S2':'66','76','56','70','80';'S3':'89','76','81','70','90';";
char ch = (char) System.in.read();
String NewValue= value.replaceAll("'", "");
StringTokenizer str=new StringTokenizer(NewValue, ";");
while(str.hasMoreTokens()){
String checkstring=str.nextToken();
char check=checkstring.charAt(0);
if(ch==check){
System.out.println(checkstring.substring(checkstring.indexOf(":")+1));
}
}
}
在控制台中输入:S1
产出:99,78,67,60,75
感谢您的所有答案
答案 1 :(得分:0)
String value = "S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;";
String resultS1 = value.subString(value.indexOf("S1:"), value.indexOf(";");
String resultS2 = value.subString(value.indexOf("S2:"), value.indexOf(";");
你可以写一个函数:
public String parseMyString(String toParse, int sStart){
return toParse.subString(value.indexOf("S"+ sStart + ":"), value.indexOf(";");
}
答案 2 :(得分:0)
尝试先用';'分割字符串作为分隔字符然后在每个子字符串上应用“来自堆栈溢出的答案”。
答案 3 :(得分:0)
globalCounterForI = 0;
function addSomeImages(limit) {
for (var i = globalCounterForI; i < limit + globalCounterForI; i++) {
$('#endless-gallery').append('<a data-lc-href="' + availableImgs[i].src + ', ' + availableImgs[i].srcset + '" data-rel="lightcase:gallery-<?php echo $number; ?>">' +
'<img src="' + availableImgs[i].src + '" srcset="' + availableImgs[i].srcset + '" srcset="' + availableImgs[i].sizes + '" />' +
'</a>');
}
globalCounterForI = ++i;
}
这将给出输出:
String s = "S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;";
String[] h = s.split(";");
for (int i = 0; i < h.length; i++) {
String result = h[i].split(":")[1];
int number=i+1;
System.out.println("S"+number+": "+result);
}
可能有更好的方法,但这是一种可能性
答案 4 :(得分:0)
首先,您应该将数据转换为更合适的结构,例如Map,而不是一遍又一遍地搜索长字符串中的值。
final static String DATA = "S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;";
public static void main(String[] args) {
Map<String,List<Integer>> data = Arrays.stream(DATA.split(";"))
.map(s -> s.split(":",2))
.collect(Collectors.toMap(
parts -> parts[0],
parts -> Arrays.stream(parts[1].split(","))
.map(Integer::valueOf)
.collect(Collectors.toList())));
System.out.println("S2 = " + data.get("S2"));
}
答案 5 :(得分:0)
您可以使用以下代码来满足您的要求。我使用了正则表达式来识别字符串的递归部分。然后在while循环中,使用拆分匹配的部分来显示您请求的结果
String s="S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;";
// here regex used to identify recursive strings
Pattern pat = Pattern.compile("S\\d+:[\\d+|,]+;");
Matcher mat = pat.matcher(s);
while (mat.find()) {
String match=mat.group();
System.out.println(match.substring(0,match.indexOf(":"))+" : "+match.substring(match.indexOf(":")+1,match.indexOf(";")));
}
您将获得以上
的以下输出S1 : 99,78,67,60,75
S2 : 66,76,56,70,80
S3 : 89,76,81,70,90