java我可以使用indexOf()在forloop中返回两个不同的值吗?
String input = "B||B|B";
char bridgeMarker = 'B';
char spaceMarker = '|';
for(int i = 0; i < input.length(); i++)
{
int posB = input.indexOf(bridgeMarker, i);
System.out.println("bridge index: " + posB);
int posSp = input.indexOf(spaceMarker, i);
System.out.println("space index: " + posSp);
if(posB > 0 && posB < input.length() && posSp > 0 && posSp < input.length())
{
//do something
}
}
我试图在for循环的每次迭代中,在String input
中找到“B”和“|”的每次出现的索引
int posSp = input.indexOf(spaceMarker, i);
和int posB = input.indexOf(bridgeMarker, i);
分别工作很好,但当我使用它们时,我会得到令人困惑的输出:
bridge index: 1
space index: 0
bridge index: 1
plot index: 2
bridge index: 3
plot index: -1
bridge index: 3
space index: -1
bridge index: 4
space index: -1
bridge index: -1
space index: -1
bridge index: -1
space index: -1
我已经做了几个小时了,我很迷茫,所以如果有人能给我任何建议,我将不胜感激
以下是我计划修改字符串值的方式:
if(input.charAt(posSp - 1) == input.charAt(posB) || input.charAt(posSp + 1) == input.charAt(posB))
{
if(input.charAt(posB - 1) != 'R' || input.charAt(posB + 1) != 'R')
{
input = input.replace(spaceMarker, ropeMarker);
System.out.println(input);
}
}
# 1 楼答案
通过使用Java Regex API,您可以更轻松、更不容易出错:
输出:
查看^{} 和^{} 以了解更多关于它们的信息。您还可以查看Oracle提供的Lesson: Regular Expressions教程
# 2 楼答案
您的问题是,对于每个索引“i”,您都在检查从i开始到字符串末尾的子字符串。看看https://www.w3schools.com/java/ref_string_indexof.asp
用这样的东西
编辑 要使用程序中的值,请将它们存储在列表中