java - string.length 在 java 中不能正常工作

标签 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");
        }

    }
}

我用 c# 编写了一段代码,它与上面的代码完全相同并且运行良好,但它在 java 中无法正常运行并且输出总是无限的。我跳过了我的代码,我认为问题出在 CheckSymmetric() 的第一个 if 语句中,它总是跳过它,但我不知道为什么。有人可以帮助我吗?

最佳答案

这是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"

你正试图获取一个在字符串末尾前 1 个字符结束的子字符串,所以你想要

String sub = s.substring(1, s.length() - 1);

从中吸取的教训:

  • 先假设您的代码是错误的,然后再假设平台的这样一个基本部分是错误的。在像 String.length() 这样简单和基本的东西中发现错误的机会几乎为零。
  • 使用调试和诊断找出问题所在:您应该能够看到 Java 代码从字符串末尾删减了太多内容。
  • 不要假设在不同平台上具有相同签名的两种方法将以完全相同的方式工作。阅读文档!

关于java - string.length 在 java 中不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21330961/

相关文章:

.net - 读取大文本文件直到某个字符串

c - 使用指针手动复制字符串时出错

c - NULL 的字符串长度

java - Kotlin 字符串最大长度? (带有长字符串的 Kotlin 文件无法编译)

java - Kotlin 接口(interface)可以缓存值吗?

java - 使用 SPRING MVC 在 JSP 中显示图像

java - 致命异常,java lang nullpointerException

java - 如何在 Spring Boot RestController 中映射动态查询参数

java - admob 测试广告 ID 正常工作,但真实 ID 广告在 Android Studio 中不起作用

python - 如何创建由a和b组成的具有一定长度的单词?