Java 如何获取两个重复字符之间的字符串
我读了这个 试过了,第一次出现两个字符,效果很好 这里有一个输入字符串,如 S1:99,78,67,60,75;S2:66,76,56,70,80;S3:89,76,81,70,90 答案应根据标识符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
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));
}
}
}