java - 如何解析具有文本限定符的字符串

标签 java string

如何解析 String str = "abc,\"def,ghi\"";

这样我得到的输出是

String[] strs = {"abc", "\"def,ghi\""}

即长度为 2 的数组。

我应该使用正则表达式还是java api或任何其他开源中有任何方法

让我做这个的项目?

已编辑

为了提供有关该问题的上下文,我正在阅读一个文本文件,其中每行都有一个记录列表。每条记录都有由分隔符(逗号或分号)分隔的字段列表。现在我有一个要求,我必须支持文本限定符,比如 excel 或 open office 支持。假设我有记录

abc, "def,ghi"

在这里,是我的定界符,"是我的文本限定符,这样当我解析这个字符串时,我应该得到两个字段 abc 和 def,ghi 而不是 {abc,def,ghi}

希望这能解决我的要求。

谢谢

谢卡尔

最佳答案

基本算法并不太复杂:

 public static List<String> customSplit(String input) {
   List<String> elements = new ArrayList<String>();       
   StringBuilder elementBuilder = new StringBuilder();

   boolean isQuoted = false;
   for (char c : input.toCharArray()) {
     if (c == '\"') {
        isQuoted = !isQuoted;
        // continue;        // changed according to the OP comment - \" shall not be skipped
     }
     if (c == ',' && !isQuoted) {
        elements.add(elementBuilder.toString().trim());
        elementBuilder = new StringBuilder();
        continue;
     }
     elementBuilder.append(c); 
   }
   elements.add(elementBuilder.toString().trim()); 
   return elements;
}

关于java - 如何解析具有文本限定符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178008/

相关文章:

java - 安卓java.lang.RuntimeException : Unable to resume activity

java - 将 JSON 对象映射到通用 Map 对象

c++如何在实例化类时为模板参数分配默认值

java - 混淆字符串值java android

java - 你会如何检查 ArrayList,Java 中每个元素的最后 2 位数字?

java - 使用 try-with-resources 包围扫描仪

java - 如何在 Java Spring 中将查询映射到 POJO?

c# - 字符串列表到字符串

arrays - Ada 中的字符串数组

java - 当 String 仅由数字组成时,我应该如何覆盖 hashCode?