Java 使用用户字符串中的反向单词创建数组

Java 使用用户字符串中的反向单词创建数组,java,arrays,string,Java,Arrays,String,我正在创建一个程序,在该程序中,用户输入一个字符串(例如:我爱你),该程序返回一个字符串中的单词数组(例如:我爱你)。但是,我无法正确编译代码,并尝试了调试,但看不出问题出在哪里 temp = splitInput[i]; splitInput[i] = reverseWord[j]; reverseWord[j] = temp; 我试图在Slack上查找类似的问题,但发现的问题与从字符串中重新排列单词有关(例如:我爱你),我找不到类似的问题,包括将字符串转换为数组,然后操纵数组 Sc

我正在创建一个程序,在该程序中,用户输入一个字符串(例如:我爱你),该程序返回一个字符串中的单词数组(例如:我爱你)。但是,我无法正确编译代码,并尝试了调试,但看不出问题出在哪里

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
我试图在Slack上查找类似的问题,但发现的问题与从字符串中重新排列单词有关(例如:我爱你),我找不到类似的问题,包括将字符串转换为数组,然后操纵数组

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a string to see it in reverse: ");
    String userEntry = sc.nextLine();
    char[] entryToChar = userEntry.toCharArray();
    System.out.println(Arrays.toString(entryToChar));
    String[] splitInput = userEntry.split(" "); 
    String reverseWord = "";
    int temp;
    String[] reverseString = new String[splitInput.length]; 

    for (int i = 0; i < splitInput.length; i++) 
    {
        String word = splitInput[i];            


        for (int j = word.length()-1; j >= 0; j--) 
        {
            reverseWord = reverseWord + word.charAt(j);
        }            

        for (int k = 0; k < splitInput.length; k++) {
                temp = splitInput[i];
                splitInput[i] = reverseWord[j];
                reverseWord[j] = temp;

                }

     }  System.out.println("Your sttring with words spelled backwards is " + reverseWord[j]);
temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;

您的代码未被编译,因为
tmp
变量被声明为int,而
splitInput[i]
是String

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
另一个问题是变量j超出了您试图访问的块范围

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;

在编写代码以获得正确的结果之前,请先弄清楚您的逻辑。

这里发生了一些事情,我认为在某些地方,您将字符串和数组混为一谈

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
让我们试着把这个问题分解成更小的问题

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
首先,我们需要反转一个单词。您的第一个内部循环(使用
j
)就是这样做的,因此让我们将其提取到自己的方法中:

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
public static String reverseWord(String word) {
    String reverseWord = "";
    for (int j = word.length()-1; j >= 0; j--) {
        reverseWord = reverseWord + word.charAt(j);
    }
    return reverseWord;
}
尽管如此,您应该注意,在循环中连接这样的字符串对性能并不是很好,并且使用
StringBuilder
可能会更快(尽管对于如此小的应用程序,它可能不会很明显):

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
一旦有了这些,您就可以拆分输入字符串(就像您所做的那样),尊重每个单词,然后将它们重新连接在一起:

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string to see it in reverse: ");
String userEntry = sc.nextLine();
String[] splitInput = userEntry.split(" ");

for (int i = 0; i < splitInput.length; i++) {
    splitInput[i] = reverseWord(splitInput[i]);
}
System.out.println("Your sttring with words spelled backwards is " + 
                   String.join(" ", splitInput));
Scanner sc=新扫描仪(System.in);
System.out.println(“输入一个字符串以反向查看:”);
字符串userEntry=sc.nextLine();
String[]splitInput=userEntry.split(“”);
for(int i=0;i
您只需将原始句子拆分为单独的单词,然后使用
StringBuilder.reverse()
以反向方式获取单词:

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
public static void main(String... args) {
    String str = getSentenceFromConsole();
    System.out.println("Your string with words spelled backwards is '" + reversLettersInWords(str) + '\'');
}

private static String getSentenceFromConsole() {
    try (Scanner scan = new Scanner(System.in)) {
        System.out.print("Enter a string to see it in reverse: ");
        return scan.nextLine();
    }
}

private static String reversLettersInWords(String str) {
    return Arrays.stream(str.split("\\s+"))
                 .map(word -> new StringBuilder(word).reverse().toString())
                 .collect(Collectors.joining(" "));
}

一个好的Java程序员应该知道语言中存在哪些工具,并在设计中适当地使用它们。我建议使用类
StringBuilder
,它有一个反转字符串的方法。您的程序可能如下所示:

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
while in.hasNext() {
  StringBuilder sb = in.next();
  sb.reverse();
  System.out.println(sb.toString());
}
如果您想自己编写反向函数进行练习,那么您只需定义一个方法,该方法接受一个字符串并返回一个反向字符串,然后调用该方法来代替
sb.reverse()

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
请知道Java中的
String
是一个不可变的对象。您不能直接修改它。您可以返回修改过的副本。
另一方面,StringBuilder允许程序员直接修改对象,正如您在上面的代码中看到的那样。

我尝试使用您的代码

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a string to see it in reverse: ");
    String userEntry = sc.nextLine();
    String[] splitInput = userEntry.split(" "); 
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splitInput.length; i++) {
        String word = splitInput[i];
        for (int j = word.length() - 1; j >= 0; j--) {
            sb.append(word.charAt(j));
        }
        sb.append(" ");
    }
    System.out.println("Your sttring with words spelled backwards is " + sb.toString());
Scanner sc=新扫描仪(System.in);
System.out.println(“输入一个字符串以反向查看:”);
字符串userEntry=sc.nextLine();
String[]splitInput=userEntry.split(“”);
StringBuilder sb=新的StringBuilder();
for(int i=0;i=0;j--){
sb.追加(单词charAt(j));
}
某人加上(“”);
}
System.out.println(“您的单词拼写向后的字符串是”+sb.toString());

在这里,我删除了所有代码的访问行……

您需要将原始字符串拆分为一个数组,然后将每个字符串反向插入到新数组中,在这里,您可以使用
StringBuilder
作为良好做法

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
class Testarray{
    public static void main(String args[]){
        String str = "I am Engineer";
        String[] spArray = str.split(" ");
        String farr[] = new String[spArray.length];

        for(int i=0;i<spArray.length;i++){
            String split = spArray[i];
            farr[i]=reverseString(split);
        }

        for(int i=0;i<farr.length;i++){
            System.out.println(farr[i]);
        }
    }
    public static String reverseString(String str){  
        char ch[]=str.toCharArray();  
        String rev="";  
        for(int i=ch.length-1;i>=0;i--){  
            rev+=ch[i];  
        }  
        return rev;  
    }  
}
类测试阵列{
公共静态void main(字符串参数[]){
String str=“我是工程师”;
字符串[]spArray=str.split(“”);
String farr[]=新字符串[spArray.length];
对于(int i=0;i
可以使用此实现尝试反转数组中的字符串元素

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String word, reverseWord;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a string to see it in reverse: ");
        String userEntry = sc.nextLine();
我爱你

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
        String[] splitInput = userEntry.split(" ");
splitInput:[我,爱,你]

temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;
        for (int i = 0; i < splitInput.length; i++)
        {
            word = splitInput[i];
            reverseWord = "";
            for (int j = word.length()-1; j >= 0; j--)
            {
                reverseWord = reverseWord + word.charAt(j);
            }
            splitInput[i] = reverseWord;
        }

您的单词拼写向后的字符串是:I evol uoy

如果它没有编译,您应该检查错误,编译器会告诉您。至少在这里发布错误。@Ridcully,这是我得到编译错误的地方,但找不到修复它们的方法。我试着执行“reverseString=reverseString+reverseWord[k],但它也不起作用。一定有很多编译错误。你在循环中也使用了错误的索引。到底是什么编译器错误?只需复制它们并粘贴到你的问题中。这将反转整个字符串,而不是字符串中的单个词。忘了循环中的字符串串联!你在想
reverseew吗rd=reverseWord+word.charAt(j);
这一行错了…?是+
reverseWord=reverseWord+“”
但你知道
reverseWord=reverseWord+word.charAt(j);
reverseWord+=word.charAt(j)
两者都给出了相同的结果……谢谢!这解决了问题,我学会了如何使代码逻辑更清晰。忘记了String.join方法,我感到几乎哑巴,但我毕竟是一个初学者……我的荣幸@annebaily。
temp = splitInput[i];
splitInput[i] = reverseWord[j];
reverseWord[j] = temp;