string.length在java中无法正常工作

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()几乎为零的机会.
  • 使用调试和诊断来解决问题所在:您应该能够看到Java代码在字符串末尾修剪过多.
  • 不要假设在不同平台上具有相同签名的两种方法将以完全相同的方式工作.阅读文档!

  • @ user1929674:你的问题的标题是"string.length在java中无法正常工作".我坚持认为`String.length()`在Java中完美*,至少就这里所示.如果您承认错误在您自己的代码中,那么从其他代码不起作用开始并不是一个好主意... (7认同)

Rah*_*hul 6

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)