如何解决我如何摆脱最后的逗号? 爪哇
我正在处理一项任务,代码运行良好,除了一个小问题。
例如,最后它应该说“t,e,s,t”,但它打印出“t,t,”。
import javax.swing.JOptionPane;
public class program {
public static int divide(String input) {
int length=0;
String output = "";
for (int i=0; i<input.length(); i++) {
length++;
output += input.charAt(i);
output += ",";
}
JOptionPane.showMessageDialog(null,"Eingabe: " +input+ "\nAnzahl der Zeichen: " +length+ "\nZeichen: \n" +output);
return length;
}
}
我只想对那些计划提供提示的人说,请注意这是一项任务,因此我实际上不允许对其进行任何重大更改。该程序必须:
使用for循环解决 输出必须在 JOptionPane 中 它必须在一个方法中(因为稍后我必须在 main-method 中编写一个 inputDialog,但现在这并不重要)。
我唯一的问题是,例如,如果字符串是“hello”,则输出必须说(我将用英语翻译输出,因为我在奥地利学校),程序会说“字母:h,l,o”,但它在末尾显示“h,o,”并带有逗号,我该如何摆脱它?
(如果我弄乱了任何变量,我也很抱歉,我在这篇文章中将它们从德语全部重命名为英语,所以我希望我没有弄乱任何一个)
解决方法
一种可能性是打印逗号,而不是在每个字符之后,而是在除第一个字符之外的每个字符之前打印。
,如果后面还有更多数据,您只想添加一个逗号。所以你可以通过两种方式做到:
- 如果字符串中已有内容,则在文本前添加逗号:
String output = "";
for (int i=0; i<input.length(); i++) {
length++;
if (output.length() > 0) output += ",";
output += input.charAt(i);
}
- 添加逗号,除非它是最后一个元素:
String output = "";
for (int i=0; i<input.length(); i++) {
length++;
output += input.charAt(i);
if (i < input.length() - 1) output += ",";
}
我个人喜欢第一种方式。
,你只需要检查是否在最后一个字符处,如果是,则跳出循环。
for (int i=0; i<input.length(); i++) {
length++; //you do not seem to need this
output += input.charAt(i);
if (i==(input.length()-1)) break; //checking whether we are at the last character
output += ",";
}
另外两个注意事项:
- 请遵循 Java Naming Conventions 并使用 PascalCase 作为您的类名,这非常重要;
- 如果您使用
StringBuilder
而不是String
来连接字符并动态构建字符串,这将使您的代码更加高效。String
是不可变的,对于每个串联,您实际上是在创建它的new
实例,这很昂贵。
您好,我使用 if 语句来检查我们是否在第一个字母处,如果是,则不写逗号,代码如下:
{
int length = 0;
String output = "";
int i = 0;
for ( i = 0; i < input.length(); i++)
{
if(i == 0)
{
length++;
output += input.charAt(i);
}
else
{
output += ",";
output += input.charAt(i);
length++;
}
}
Console.WriteLine(output);
}
,
-
您的循环遍历每个字符,附加字符和逗号。这包括最后一个字符。需要想办法避免最后迭代后加逗号;
-
使用字符串并一个一个地附加字符是非常低效的。这就是
StringBuilder
的设计目的; -
长度变量的目的是什么?可以用
代替input.length() - 1
; -
String.format()
使您的代码更易于阅读,而不是将字符串串联在一起; -
不要害怕在整个代码中使用合理的间距。否则很难阅读。
这样的事情应该可以很好地工作:
public static int divide(String input) {
int length = input.length() - 1;
String output;
if (input.length() == 0) output = input;
else {
StringBuilder outputBuilder = new StringBuilder(input.charAt(0));
for (int i = 1; i < input.length(); i++) {
outputBuilder.append(',').append(input.charAt(i));
}
output = outputBuilder.toString();
}
JOptionPane.showMessageDialog(null,String.format("Eingabe: %s\nAnzahl der Zeichen: %d\nZeichen: \n%s",input,length,output);
return length;
}
,
我会使用 StringJoiner
StringJoiner output = new StringJoiner(",");
for (int i = 0; i < input.length(); i++) {
length++;
output.add(input.substring(i,i + 1));
}
JOptionPane.showMessageDialog(… + output.toString());
所以你不能使用 StringJoiner
String output = "";
String comma = "";
for (int i = 0; i < input.length(); i++) {
length++;
output += comma;
output += input.charAt(i);
comma = ",";
}
,
学习后,请使用 StringJoiner
或类似的现代设备。我最喜欢的链接在底部。您还将有一段时间学习使用 StringBuilder
或 StringBuffer
组合字符串。
与此同时,我仍然喜欢我在第一年编程时学到的东西:当循环中的一次迭代需要不同时,将其从循环中移除。根据我的经验,这通常会给出最清晰的代码。在你的情况下:
String input = "Wort";
String output = "" + input.charAt(0);
for (int i = 1; i < input.length(); i++) {
output += ",";
output += input.charAt(i);
}
System.out.println("Zeichen: " + output);
输出:
蔡晨:W,o,r,t
在这种情况下,我将循环外的第一个字符添加到输出(不带逗号)中,已经在 output
的声明中。循环从索引 1(不是 0)开始。在循环内,我必须在添加下一个字符之前添加逗号 before。在其他情况下,可以将 last 项目放在循环之外,结果将是相同的。
链接
-
Answer by Lii to a similar question 演示了所有
String.join()
、Collectors.joining()
和StringJoiner
。 - StringBuilder vs String concatenation in toString() in Java
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。