如何在重复这些字符的两个字符之间获取字符串

时间:2016-12-21 09:26:00

标签: java string

我读了这个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)。

你能帮我实现这个结果吗?

6 个答案:

答案 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