Replace 用户输入的字符串:用分号替换逗号,引号中的分号除外

Replace 用户输入的字符串:用分号替换逗号,引号中的分号除外,replace,datatable,bluej,Replace,Datatable,Bluej,大家好,我正在学习使用Bluej编程,问题是:从标准输入,用分号替换所有逗号,除了那些在双引号内的逗号 例子:“约翰,史密斯”在这里,有时能干而且准备好了 输出:“约翰,史密斯”在这里;有能力和准备;有时候 除了引号中的字符串部分(“John,Smith”)之外,是否有一种简单的方法可以使用.replace(“,”,“;”)?或者我还需要别的什么 好的,我已经试过了,我认为这是一个很好的尝试,它可以编译,但结果不能代替逗号 import java.util.*; public class CSV

大家好,我正在学习使用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);
    }
}
import java.util.*;
公共类CSVFile{
公共静态void main(字符串[]args){
输入();
}
公共静态无效输入(){
扫描仪kb=新扫描仪(System.in);
字符串信息;
System.out.println(“输入数据”);//CSV文件格式的用户输入
info=kb.nextLine();
而(!info.equals(“#”){
过程(信息);
System.out.println(“输入数据”);
info=kb.nextLine();
}
System.out.println(“程序结束”);
}
公共静态无效进程(字符串信息){
int sl,i,qCount;
sl=信息长度();
qCount=0;
对于(i=0;i0且info.charAt(i)=','
{
info.replace(“,”,“;”);//用分号替换逗号
}
}
系统输出打印项次(信息+“”+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("===================");
    }
公共静态作废流程(字符串信息){
StringBuilder str=新的StringBuilder(信息);
int n=str.length();
int q=1;
int j=0;
对于(int i=0;i0){
塞查拉特街(i,,;);
}
}
System.out.println(“===============================”);
系统输出打印项次(str);
System.out.println(“===============================”);
}

有人能提出改进建议吗?我通过例子学习得更好,哈哈,如果你看我花了多长时间才得出答案,你就知道了。我可以看到这将如何应用,就像我刚刚用扫描仪打开一个文件阅读器来读取实际的CSV文件一样。

好的,花了一段时间,但我又回来了。问题是

'将所有逗号替换为分号,双引号内的逗号除外//封闭报价

例子:“约翰,史密斯”在这里,有时能干而且准备好了

输出:“约翰,史密斯”在这里;有能力和准备;有时候

我用数组、列表和映射尝试了很多不同的代码,但最终答案很简单。哈哈,我要感谢“ddp”提出了这个问题“替换字符串中特定索引处的字符?”以及“Petar Ivanov”的回答

以下是第一次尝试:

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);
    }
}
因此,对于我的解决方案,我使用了以下过程方法,并替换了当前的过程方法

public static void process(String info){
        StringBuilder info2 = new StringBuilder(info);
        int n = info2.length();
        int q = 1;
        int j = 0;
        for (int i = 0; i < n; i++){
            if (info2.charAt (i) == '"'){
                q++;
                j = q%2;             //j is the remainder if q is an odd numder                
            }
            if (info2.charAt (i) == ',' && j > 0){
                info2.setCharAt(i, ';');
            }
        }
        System.out.println("===================");
        System.out.println(info2);
        System.out.println("===================");
    }
公共静态作废流程(字符串信息){
StringBuilder info2=新的StringBuilder(信息);
int n=info2.length();
int q=1;
int j=0;
对于(int i=0;i0){
信息2.setCharAt(i,,;);
}
}
System.out.println(“===============================”);
System.out.println(info2);
System.out.println(“===============================”);
}
这只适用于以引号开头的字符串和以引号结尾的字符串,否则它不知道该怎么做,lol,但它适用于所有以引号开头的示例

如有任何改进,我们将不胜感激

public static void process(String info){
        StringBuilder info2 = new StringBuilder(info);
        int n = info2.length();
        int q = 1;
        int j = 0;
        for (int i = 0; i < n; i++){
            if (info2.charAt (i) == '"'){
                q++;
                j = q%2;             //j is the remainder if q is an odd numder                
            }
            if (info2.charAt (i) == ',' && j > 0){
                info2.setCharAt(i, ';');
            }
        }
        System.out.println("===================");
        System.out.println(info2);
        System.out.println("===================");
    }