如何在Java中向后打印多个字符串
Posted
技术标签:
【中文标题】如何在Java中向后打印多个字符串【英文标题】:How to print several strings backwards in Java 【发布时间】:2013-10-01 17:24:42 【问题描述】:我正在尝试获取一个充满字符串的文件,读取它,然后打印出一些内容:
字符串 字符串倒转和大写 字符串长度还有一些事情,但是我什至还没有达到这一点,并且不想要求任何人完全为我编写代码。折腾了一段时间后,我差不多完成了(我相信,除了一些地方)。
让我绊倒的是倒退的词。我们需要使用 prinf 将输出整齐地放入列中,但如果我一次读取每个字符,我就无法做到这一点。所以我尝试设置一个String backwardsWord = "";
并添加每个字符。
这是让我绊倒的部分:
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
backwardsWord += (upperCaseWord.charAt(i) + "");
我的问题是,当我打印它时,第一个单词可以正常工作。但是,之后的每个单词都会添加到前一个单词中。
例如:如果我向后打印 cat、dog 和 rat,它会显示
TAC
TACGOD
塔哥达
我显然希望它阅读
TAC
上帝
焦油
任何帮助将不胜感激。
【问题讨论】:
文件中的字符串是如何分隔的?每行一个字符串? 您是否在每次循环之前都初始化了可用的 backKwardsWord 你应该看看StringBuilder.reverse()
它会为你轻松完成所有的倒车工作。
【参考方案1】:
看起来您的变量backwardsWord
总是附加一个字符,而不会在单词之间重置。最简单的解决方法是在循环之前将backwardsWord
设置为空字符串来清除它。
backwardsWord = ""; //Clear any existing characters from backwardsWord
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
backwardsWord += (upperCaseWord.charAt(i) + "");
如果您一次构建一个字符串,您将使用大量内存,因为Java Strings are immutable。
要更有效地执行此操作,请改用StringBuilder。这是为了像你正在做的那样建立角色。完成后,您可以使用toString
方法将字符串取出。
StringBuilder builder = new StringBuilder(); //Creates the String builder for storing the characters
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
builder.append(upperCaseWord.charAt(i)); //Append the characters one at a time
backwardsWord = builder.toString(); //Store the finished string in your existing variable
这有一个额外的好处,就是每次都重置backwardsWord。
最后,由于您的目标是反向获取字符串,我们实际上可以在没有循环的情况下做到这一点as shown in this answer
backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()
这将使用来自upperCaseWord
的字符创建一个新的StringBuilder
,反转字符然后将最终字符串存储在backwardsWord
中
【讨论】:
【参考方案2】:这应该可以完成工作 ->
class ReverseWordsInString
public static String reverse(String s1)
int l = s1.length();
if (l>1)
return(s1.substring(l-1) + reverse(s1.substring(0,l-1)));
else
return(s1.substring(0));
public static void main(String[] args)
String st = "Cat Dog Rat";
String r = "";
for (String word : st.split(" "))
r += " "+ reverse(word.toUpperCase());
System.out.println("Reversed words in the given string: "+r.trim());
【讨论】:
是的,结果是 - SEL SELBARÉSIM【参考方案3】:你在哪里声明 String backsWord?
如果您不清除单词之间的字符,则分配给该字符串的内存空间仍将包含先前添加的字符。
确保你在向后折腾Word = "";在单词之间重置它的价值,这应该可以解决您的问题。
没有看到你的更多代码,我无法告诉你确切的位置。
【讨论】:
以上是关于如何在Java中向后打印多个字符串的主要内容,如果未能解决你的问题,请参考以下文章