嗨,我正在使用 Bluej 学习编程,问题是:从标准输入中,用分号替换所有逗号,但双引号内的逗号除外。
例如:“约翰,史密斯”有时会在这里,有能力并且准备好。
输出:“约翰,史密斯”在这里;有能力并准备好;有时。
除了引号中的字符串部分(“John,Smith”)之外,是否有使用 .replace(',',';') 的简单方法?还是我需要别的东西?
好的,所以我已经尝试过了,我认为这是一个不错的选择,它可以编译,但结果不能替换逗号
import java.util.*;
public class CSVFile{
public static void main(String[]args){
input();
}
public static void input(){
Scanner kb = new Scanner(System.in);
String info;
System.out.println("Enter Data"); //User inputs in CSV File format
info = kb.nextLine();
while (!info.equals("#")){
process(info);
System.out.println("Enter Data");
info = kb.nextLine();
}
System.out.println("End of Program");
}
public static void process (String info){
int sl, i, qCount;
sl = info.length();
qCount = 0;
for (i = 0; i < sl; i++){
if (info.charAt(i)=='"'){
qCount++; //Quotation mark count
}
if (qCount%2 == 0 && info.charAt(i) == ',') //if qCount remainder > 0 and info.charAt (i) == ','
{
info.replace(',',';'); //Replace commas with semicolons
}
}
System.out.println(info+" "+qCount);
}
}
在这里,我试图替换 info.charAt (i) 如果它是一个逗号但还没有正确。有什么建议么?
好的,尝试了一种不同的方法,它适用于该示例。
public static void process(String info){
StringBuilder str = new StringBuilder(info);
int n = str.length();
int q = 1;
int j = 0;
for (int i = 0; i < n; i++){
if (str.charAt (i) == '"'){
q++;
j = q%2;
}
if (str.charAt (i) == ',' && j > 0){
str.setCharAt(i, ';');
}
}
System.out.println("===================");
System.out.println(str);
System.out.println("===================");
}
任何人都可以提出改进建议吗?我通过示例学习得更好,大声笑,因为您可以知道我花了多长时间才得出答案。我可以看到这将如何应用,就好像我刚刚用扫描仪打开了一个 FileReader 来读取一个实际的 CSV 文件一样。