Hoo*_*man 4 java string string-length
嗨,我有一个代码,检查字符串是否是回文.代码是这样的:
package ProjeTarahi;
import java.util.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.lang.String;
public class Main
{
public boolean CheckIsSymmetric(String s)
{
if (s.length()<=1)
{
return true;
}
if (s.charAt(0)==s.charAt(s.length()-1))
{
String sub = s.substring(1,s.length()-2);
return CheckIsSymmetric(sub);
}
else
{
return false;
}
}
public static void main(String args[])throws FileNotFoundException
{
Scanner sc=new Scanner(new FileInputStream(new File("in.txt")));
String input=sc.nextLine();
Main p=new Main();
if(p.CheckIsSymmetric(input)==true)
{
System.out.println("in reshte motegharen ast");
}
else
{
System.out.println("infinite");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在c#中编写了一个与上面的代码完全相同的代码,它的工作非常好,但它在java中不能正常工作,它的输出总是无限的.我跨过了我的代码,我认为问题出现在CheckSymmetric()的第一个if语句中,它总是跳过它,但我不知道为什么.有人可以帮助我PLZ?
Jon*_*eet 16
这是String.Substring(int).NET和String.substring(int, int)Java 之间的区别.
在.NET中,第二个参数是您尝试采用的子字符串的长度.
在Java中,第二个参数是您尝试采用的子字符串的独占结束索引.
例如:
// .NET
"Hello world".Substring(3, 4) => "lo w"
// Java
"Hello world".substring(3, 4) => "w"
Run Code Online (Sandbox Code Playgroud)
您正在尝试获取一个子字符串,该子字符串在字符串结尾之前结束1个字符,因此您需要
String sub = s.substring(1, s.length() - 1);
Run Code Online (Sandbox Code Playgroud)
从中吸取教训:
String.length()几乎为零的机会.String中的length方法返回字符串的长度.在这里,您希望在删除第一个char和最后一个char后获取子字符串.从而
String sub = s.substring(1,s.length()-2);
Run Code Online (Sandbox Code Playgroud)
应该:
String sub = s.substring(1,s.length()-1);
Run Code Online (Sandbox Code Playgroud)