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