for循环中的Java字符串索引超出范围(codingbat函数mirrorEnds)
我有一个关于字符串3中编码BAT的问题。问题如下:for循环中的Java字符串索引超出范围(codingbat函数mirrorEnds),java,string,Java,String,我有一个关于字符串3中编码BAT的问题。问题如下: public String mirrorEnds(String string) { if(string.length() <=1) return string; String x = ""; int y = string.length() - 1; for(int i = 0; i < string.length()/2; i++) { if(string.charAt(i) == string.
public String mirrorEnds(String string) {
if(string.length() <=1) return string;
String x = "";
int y = string.length() - 1;
for(int i = 0; i < string.length()/2; i++)
{
if(string.charAt(i) == string.charAt(y))
{
x+= Character.toString(x.charAt(i));
y--;
}
else
{
return x;
}
}
return string;
}
给定一个字符串,在两个位置查找镜像(向后)字符串
给定字符串的开头和结尾。换句话说,零或更多
字符位于给定字符串的最开始处,以及
字符串的末尾顺序相反(可能重叠)
例如,字符串“abXYZba”的镜像端为“ab”
镜像端(“abXYZba”)→ “ab”
镜子末端(“abca”)→ “a”
镜像端(“aba”)→ “aba”
我的代码如下:
public String mirrorEnds(String string) {
if(string.length() <=1) return string;
String x = "";
int y = string.length() - 1;
for(int i = 0; i < string.length()/2; i++)
{
if(string.charAt(i) == string.charAt(y))
{
x+= Character.toString(x.charAt(i));
y--;
}
else
{
return x;
}
}
return string;
}
但是这个问题让我犯了一个错误,说indexoutofbounds。为什么会出现这种情况?您正在访问错误字符串的
i
th字符:
x += Character.toString(x.charAt(i));
字符串x
一开始是空的,因此索引0处的字符不存在
改为访问原始的字符串
x += Character.toString(string.charAt(i));
这是我解决这个问题的代码,很简单
public String mirrorEnds(String string) {
int start = 0;
int end = string.length()-1;
for(int i=0;i<string.length();i++){
if(string.charAt(start) == string.charAt(end) ){
start++;
end--;
}
if(start != ((string.length()-1)-end)){
break;
}
}
return string.substring(0,start);
}
公共字符串镜像结束(字符串){
int start=0;
int end=string.length()-1;
对于(int i=0;ipublicsstringmirrorneds(stringstring){
字符串g=“”;
对于(int i=0;i您有一个好的开始,但是我认为您应该考虑一个更简单的方法。您只需要使用一个索引(既不是代码< i>代码/<代码> y>代码>)来跟踪您在字符串中的位置,因为问题表明重叠是可能的。因此,您不必运行for for循环,直到<代码>字符串。()/2
,您可以让它在字符串的整个长度上运行
此外,您应该考虑使用while循环,因为在问题中有一个明确的退出条件:一旦开始的字符串停止等于结尾的字符串,则中断循环并返回字符串的长度。while循环也将使用较少的变量,并减少您的条件运算符的数量。代码
这是我对这个问题的答案
public String mirrorEnds(String string) {
String mirror = "";
int i = 0;
while (i < string.length() && string.charAt(i) == string.charAt(string.length() - i - 1) {
mirror += string.charAt(i);
i++;
}
return mirror;
}
公共字符串镜像结束(字符串){
字符串mirror=“”;
int i=0;
而(i
另一个需要注意的方便提示是,在Java中,可以不强制转换就将字符附加到字符串中。在for循环中的第一个if语句中,不需要使用Character.toString()
将x.charAt(i)
强制转换到字符串中,只需将x.charAt(i)附加到字符串中即可
通过写入x+=x.charAt(i)
公共字符串镜像(字符串str)到字符串末尾{
StringBuilder newStr=新的StringBuilder();
字符串结果=”;
对于(int i=0;ipublicsstringmirrorneds(stringstring){
//反向给定字符串
字符串反转=”;
对于(int i=string.length()-1;i>=0;i--){
反向+=字符串字符(i);
}
//同时循环遍历每个字符串。如果“string”的子字符串等于“reversed”的子字符串,
//将子字符串指定给变量“text”
字符串文本=”;
对于(int i=0;ipublicsstringmirrorneds(stringstring){
串出“”;
int len=string.length();
对于(int i=0,j=len-1;我想我是瞎子:)。我看了太多其他东西,忘了检查这个简单的调用…为您的代码提供一些上下文,来解释您是如何解决提问者的问题的,这会很有帮助。我建议您在回答中添加一些解释性文本,否则您可能会因为“低质量”而将其删除(尽管这可能是一个正确的答案)!您也可以利用stringbuilder类,因为它具有反向方法。我的解决方案将字符串的开头与反向结尾匹配。欢迎使用此方法!请描述您正在做的事情-请阅读^^此问题已包含多个答案和一个可接受的答案。您能解释您的答案与t的不同之处吗其他答案?也要知道,从长远来看,纯代码答案是没有用的。这是类似的。区别在于,这里我先反转了字符串,然后再继续处理其余的解决方案;还使用了本机的“StartWith”方法,而不是直接比较字符,我发现这更容易阅读。谢谢你的评论。我会l在将来回复时添加更多解释。为什么使用两个for循环?请对您的答案进行一些解释,以便其他人可以学习。虽然此代码可能提供问题的解决方案,但最好添加上下文说明其工作原理。这可以帮助将来的用户学习,并将这些知识应用到他们自己的代码中。您也可以在解释代码时,用户可能会以投票的形式给予积极反馈。
public String mirrorEnds(String string) {
String mirror = "";
int i = 0;
while (i < string.length() && string.charAt(i) == string.charAt(string.length() - i - 1) {
mirror += string.charAt(i);
i++;
}
return mirror;
}
public String mirrorEnds(String str) {
StringBuilder newStr = new StringBuilder();
String result = "";
for (int i=0; i <= str.length(); i++){
newStr.append(str.substring(0, i));
if (str.startsWith(newStr.toString()) && str.endsWith(newStr.reverse().toString()))
result = str.substring(0, i);
newStr.setLength(0);
}
return result;
}
public String mirrorEnds(String string) {
// reverse given string
String reversed = "";
for (int i = string.length() - 1; i >= 0; i--) {
reversed += string.charAt(i);
}
// loop through each string simultaneously. if substring of 'string' is equal to that of 'reversed',
// assign the substring to variable 'text'
String text = "";
for (int i = 0; i <= string.length(); i++) {
if (string.startsWith(string.substring(0, i)) ==
string.startsWith(reversed.substring(0, i))) {
text = string.substring(0, i);
}
}
return text;
}
public String mirrorEnds(String string) {
String out = "";
int len = string.length();
for(int i=0,j = len-1;i<len;i++,j--)
{
if(string.charAt(i) == string.charAt(j))
out += string.charAt(i);
else
break;
}
return out;
}