当前位置: 首页 > 知识库问答 >
问题:

在这个句子转换程序中,为什么使用char而不是String?

凤伟泽
2023-03-14

我在做一些初学者编码的挑战,其中一个挑战是制作一个反转给定字符串的程序。它对单词起作用,但当我输入单词时,中间有空格,程序只会反转输入的第一个单词。

我谷歌了“java中带空格的反向单词”,发现了这个:

// Java program to reverse a string
// preserving spaces.
public class ReverseStringPreserveSpace {
    // Function to reverse the string
    // and preserve the space position
    static void reverses(String str)
    {
 
        char[] inputArray = str.toCharArray();
        char[] result = new char[inputArray.length];
 
        // Mark spaces in result
        for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i] == ' ') {
                result[i] = ' ';
            }
        }
 
        // Traverse input string from beginning
        // and put characters in result from end
        int j = result.length - 1;
        for (int i = 0; i < inputArray.length; i++) {
 
            // Ignore spaces in input string
            if (inputArray[i] != ' ') {
 
                // ignore spaces in result.
                if (result[j] == ' ') {
                    j--;
                }
                result[j] = inputArray[i];
                j--;
            }
        }
        System.out.println(String.valueOf(result));
    }
 
    // driver function
    public static void main(String[] args)
    {
        reverses("internship at geeks for geeks");
    }
}

>

我可以修改我自己的代码,使它在不遵循上述代码的情况下颠倒一个句子吗?我的代码:

import java.util.Scanner;

class ReverseString
{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the word to be reversed:");
        String input = s.next();

        String reversed = "";
        for (int i = 0; i < input.length(); i++)
        {
            char ch = input.charAt(i);
            reversed = ch + reversed;
        }
        System.out.println(reversed);
    }
}

共有1个答案

锺离嘉容
2023-03-14

你在上面找到的解决方案是针对一个非常简单的问题的高度过度设计的解决方案。

>

当我检查你的代码时,它可以很好地处理句子。我真的不知道你面临什么问题。

编辑:获取输入字符串时,应避免使用scanner.next();方法。因为它只读取一个空格之前的字符串。因此,您的程序不会读取您输入的整个字符串。您应该使用scanner.nextLine();来读取String值。

有关扫描仪类的更多信息:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

这是一个非常好的反转字符串的方法。这可能是反转字符串最有效的方法。

public String reverseString(String input) {
        char[] arr = input.toCharArray();
        int i = 0, j = arr.length - 1;
        while(i < j) {
            char temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++; j--;
        }
        return new String(arr);
    }
 类似资料:
  • 我试图运行下面的代码,当使用int numTest=sc.nextInt()时不起作用,而当使用int numTest=Integer.parseInt(sc.nextLine())时正常工作。但是我试图在这里只得到一个整数值,我可以用它来获取用户设置的字符串数。那么为什么我不能使用sc.nextInt()呢?

  • 问题内容: 缩小转换是指将可以容纳较大值的数据类型放入可以容纳较小值的数据类型。 但是,我不明白为什么将short转换为char会缩小转换范围,但是我有直觉,这与这两种数据类型的有符号/无符号有关,但我无法解释原因。 看起来这将是一个扩大的转换,或者至少不会缩小或扩大,因为它们都是16位并且可以容纳相同数量的值。 问题答案: 这是因为a 可以保持负值,而您可能从中看不到。让我举几个例子。 A(负)

  • 当我只运行预处理器时,输出文件包含20。 然而,据我所知,预处理器只是进行文本替换。所以这就是我认为正在发生的事情(这显然是错误的,但idky): NUM被定义为10 所以我认为输出应该是10而不是20。有什么能解释出哪里出了问题吗?

  • sizeof(char)和sizeof(bool)都等于1(在我的编译器/系统/whatever中,我听说它并不总是相同的值),一个bool只能存储true或false,而char可以接受更多的值,并且可以使用按位运算符充当多个bool变量(8位,每个位可以用作1 bool共8个bool) 那么使用bool而不是char有什么好处吗? 那么除了可读性,还有别的吗?我在某处读到,int比short或

  • 转换/展平列表的简单方法是什么 我知道我可以通过迭代并使用来做到这一点,但我想知道是否有更简单的方法使用Java8个流来做到这一点? 可能是这样的,但不必将原语char装箱到Character:

  • 包中的collections.list()方法返回而不是有充分的理由吗?