[英]How do I get rid of the comma at the end? (Java)
我正在處理一項任務,代碼運行良好,除了一個小問題。
例如,最后它應該說“t,e,s,t”,但它打印出“t,e,s,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 循環解決 output 必須在 JOptionPane 它必須在一個方法中(因為我稍后必須在 main-method 中編寫一個 inputDialog,但這現在不重要)。
我唯一的問題,例如 output 將不得不說(我會用英語翻譯 output,因為我在奧地利學校)如果字符串是“你好”,程序會說“字母:h, e, l, l, o”,但它卻說“h,e,l,l,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 += ",";
}
兩個附加說明:
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);
Output:
Zeichen: W,o,r,t
在這種情況下,我將第一個字符移出循環並將其添加到 output 聲明中的output
(不帶逗號)中。 循環從索引 1(不是 0)開始。 在循環內,我必須在添加下一個字符之前添加逗號。 在其他情況下,可能會將最后一項放在循環之外,結果將是相同的。
String.join()
、 Collectors.joining()
和StringJoiner
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.