gpt4 book ai didi

java - StringBuilder 反向更改我的初始变量?

转载 作者:行者123 更新时间:2023-11-29 08:53:01 28 4
gpt4 key购买 nike

我最近开始使用 Java,我正在尝试编写一个简短的程序来检查单词或短句中的回文。我想将 StringBuilder 用于反向方法。我的想法是从用户条目中获取一个变量(将其转换为小写字母并删除空格和逗号),然后使用另一个变量来保存反转的条目,并使用 .equals 对它们进行比较。但是,.reverse() 方法正在更改我的用户条目的值,我不知道为什么。我知道 Java 中的引用,但只是最近才了解,还没有完全了解。

如有任何帮助,我们将不胜感激。

import java.util.*;

public class Palindrome {

public static void main(String[] args) {

Scanner kb = new Scanner(System.in);
System.out.println("Enter a word or phrase to test for a palindrome: ");
String entry = kb.nextLine();

String entryLower = entry.toLowerCase();
String entryNoSpace = entryLower.replace(" ", "");
String entryFinal = entryNoSpace.replace(",", "");

//Convert String to StringBuilder to use reverse method
StringBuilder sbEntry = new StringBuilder(entryFinal);
System.out.println("sbEntry: " + sbEntry);

StringBuilder sbEntryReverse = sbEntry.reverse();
System.out.println("sbEntryReverse: " + sbEntryReverse);


System.out.println("sbEntry: " + sbEntry);

对于单词“Dog”,这给出了输出:

Enter a word or phrase to test for a palindrome: 
Dog
sbEntry: dog
sbEntryReverse: god
sbEntry: god

最佳答案

您不能比较 sbEntrysbEntryReverse 因为 sbEntry.reverse()StringBuffer 的内容更改为sbEntry 指的是哪个。与对不可变的 String 对象进行操作的方法不同,StringBuffer 方法(如 reverse())会改变 StringBuffer 中的字符缓冲区目的。 StringBuffer 对象是可变的,而 String 对象不是。

相反,您需要将 StringBuffer 的最终内容(sbEntrysbEntryReverse)与原始输入字符串进行比较,最终入口:

String entryLower = entry.toLowerCase();
String entryNoSpace = entryLower.replace(" ", "");
String entryFinal = entryNoSpace.replace(",", "");

//Convert String to StringBuilder to use reverse method
StringBuilder sbEntry = new StringBuilder(entryFinal);
StringBuilder sbEntryReverse = sbEntry.reverse();
boolean isPalindrome = entryFinal.equals( sbEntryReverse.toString() );

关于java - StringBuilder 反向更改我的初始变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21757250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com