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;