2013-07-04 2 views
0

안녕하세요. 표준 입력에서 큰 따옴표 안에있는 쉼표를 제외하고 모든 쉼표를 세미콜론으로 바꿉니다.사용자 입력 문자열 : 인용 부호로 된 것을 제외하고 쉼표를 세미콜론으로 바꿉니다.

예 : "John, Smith"가 여기 있고, 준비가되어 있습니다.

출력 : "John, Smith"가 있습니다. 유능하고 준비가되어있다. 때때로.

견적 ("John, Smith")의 문자열 부분을 제외하고 .replace (',', ';')를 사용하는 쉬운 방법이 있습니까? 또는 다른 것을 필요로합니까? 좋아

그래서이 시도하고 나는 그것이 좋은 이동라고 생각, 그것은 컴파일하지만 결과는 내가 info.charAt (i)를하면 교체하려고했던 쉼표를

다음
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 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("==================="); 
    } 

누구든지 개선을 제안 할 수 있습니까? 나는 내가 답을 생각해 내는데 얼마나 오랜 시간이 걸렸는지를 알 수 있듯이 예를 들어 더 잘 배우게됩니다. 나는 마치 실제 CSV 파일을 읽는 스캐너로 FileReader를 열었던 것처럼 이것이 어떻게 적용되는지를 알 수 있습니다.

답변

0

좋아, 시간이 좀 걸렸지 만, 다시 돌아 왔습니다. 문제는

'입니다. 모든 쉼표는 큰 따옴표 안에있는 쉼표를 제외하고 세미콜론으로 바꿉니다. // 닫힌 따옴표.

예 : "John, Smith"가 가끔 준비가되었습니다.

출력 : "John, Smith"가 있습니다. 유능하고 준비가되어있다. 때때로.

배열과 목록 및지도와 함께 다른 코드를 많이 사용했지만 대답이 내려지면 대답은 매우 간단했습니다. '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); 
    } 
} 

그리고 롤 잘은 난생 처음을했지만 약 3가 간다 후 함께 모든 작동이 중지 작동하지 않았다. 그래서 나는 계속해서 해결책을 찾고있었습니다.

: 그리고 "페 타르 이바노프 '그들의 예'DDP '에

특정 수 charAt (특정 인덱스) 변경을 원

와'페 타르 '는 모두 StringBuilder를 사용하여 본 실시 예를 제공하는 솔루션은"DDP "에 의해 제공된 발견
StringBuilder myName = new StringBuilder("domanokz"); 
myName.setCharAt(4, 'x'); 

System.out.println(myName); 

내 솔루션을 위해 나는 다음 프로세스 메서드를 만들고 현재 프로세스 메서드를 바꿉니다.

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("==================="); 
    } 

이것은 단지 한 당신이 따옴표로 문자열을 한 beging와 따옴표를 종료 그렇지 않으면 롤 어떻게 해야할지하지 않습니다하지만 모두가 인용 부호로 시작 내가 가지고있는 예에서 작동으로 작동합니다.

개선 사항에 대해서는 매우 감사하겠습니다.