私は、scanner.delimiter を使用して csv を分割しています。区切り文字は「,」です。ただし、「Monsters, Inc.」のように、データにカンマが含まれるデータがあります。
ただし、区切り文字を "\",\"" に設定すると、他のすべてでクラッシュします。
独自の scanner.delimiter メソッドを作成する必要のないアイデアはありますか?
私は、scanner.delimiter を使用して csv を分割しています。区切り文字は「,」です。ただし、「Monsters, Inc.」のように、データにカンマが含まれるデータがあります。
ただし、区切り文字を "\",\"" に設定すると、他のすべてでクラッシュします。
独自の scanner.delimiter メソッドを作成する必要のないアイデアはありますか?
この種の問題に対しては、scanner.delimiter は機能しないと思います。余分なカンマが存在するデータに引用符がある場合は、正規表現またはコードを使用して、同様の回答/質問で述べたように String.split も使用してこの種の問題を解決できます。見積もりがなければ、本当に何もできません。
同様の例がstackoverflowにありました。たとえば、これはあなたに当てはまると思います:
String.split() を使用してテキスト区切り文字として引用符を使用して csv ファイルを分割する
分割の使用
public static void main(String[] args) {
String s = "Sachin,,M,\"Maths,Science,English\",Need to improve in these subjects.";
String[] splitted = s.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println(Arrays.toString(splitted));
}
カスタム コードの使用
public static ArrayList<String> customSplitSpecific(String s)
{
ArrayList<String> words = new ArrayList<String>();
boolean notInsideComma = true;
int start =0, end=0;
for(int i=0; i<s.length()-1; i++)
{
if(s.charAt(i)==',' && notInsideComma)
{
words.add(s.substring(start,i));
start = i+1;
}
else if(s.charAt(i)=='"')
notInsideComma=!notInsideComma;
}
words.add(s.substring(start));
return words;
}