Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取两个重复字符之间的字符串_Java_String - Fatal编程技术网

Java 如何获取两个重复字符之间的字符串

Java 如何获取两个重复字符之间的字符串,java,string,Java,String,我读了这个 试过了,第一次出现两个字符,效果很好 这里有一个输入字符串,如 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) 你能帮我达到这个结果吗 String value = "S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;"; String res

我读了这个

试过了,第一次出现两个字符,效果很好

这里有一个输入字符串,如

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)

你能帮我达到这个结果吗

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

尝试先用“;”拆分字符串作为分隔字符,然后在每个子字符串上应用“来自堆栈溢出的答案”

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

可能有更好的方法,但这是一种可能性

首先,您应该将数据转换为更合适的结构,例如映射,而不是反复搜索长字符串中的值

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"));
}
final static String DATA=“S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90;”;
公共静态void main(字符串[]args){
Map data=Arrays.stream(data.split(“;”))
.map(s->s.split(“:”,2))
.collect(collector.toMap)(
零件->零件[0],
部件->数组.stream(部件[1]。拆分(“,”)
.map(整数::valueOf)
.collect(Collectors.toList());
System.out.println(“S2=“+data.get”(“S2”);
}

您可以使用以下代码来满足您的需求。我使用正则表达式来标识字符串的递归部分。然后在while循环中,匹配的部分使用split来显示您请求的结果

    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

使用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)查找
S2的索引,(2)查找
的索引
在从(2),(3)开始的子字符串中,结果是从(1)到(2)的子字符串。@Andremoniy我确实试过写它,我想出了错误的解决方案,所以我提出了这个问题。我不知道为什么人们会突然投反对票,@UserA1195如果你尝试了一些东西,不管它有多错或多对,都要把它包含在问题中。如果没有它,它似乎是一个
请为我编写代码的问题
,而不是通常接受的
嘿,我想要那个输出,用这种方式尝试了一下,但我得到的是这个问题。这样你通常不会得到反对票。有关更多信息,请参阅section@Andremoniy我将保留此建议,并将其用于进一步的问题。谢谢。使用StringTokenizer怎么样?因为他们说:“StringTokenizer方法不区分标识符、数字和带引号的字符串”。哦,很高兴知道:)谢谢。因为我使用StringTokenizer在下划线处拆分了一个类似于
en_en
的字符串,所以将这两部分都作为单个字符串。认为可以在这里为<代码>
感谢@Nico提供关于StringTokenizer的想法,它很好用。这对Tokenizer有用吗?以前从未用过!您是否考虑过当S>9时,此操作将失败?另外,javadoc for StringTokenizer表示它是一个不鼓励使用的遗留类。我尝试了“String”而不是“char”,它在S>9时工作良好。
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));
          }
    }
}