【问题标题】:How to Tokenize String with Commas and Line Delimiter如何使用逗号和行分隔符标记字符串
【发布时间】:2015-04-16 10:53:21
【问题描述】:

我正在 Swift 中制作一个简单的字符串标记器,就像在 Java 中一样......但它真的不适合我。

我的数据源中每一行的末尾用“^”分隔,数据用逗号分隔。

例如:"字符串 1,字符串 2,字符串 3,^,字符串 1,字符串 2,字符串 3,^"

这就是我在 Java 中要做的...(我只想要每行数据中的前两个字符串)

        String delimeter = "^";
        StringTokenizer tokenizedString = new StringTokenizer(responseString,delimeter);

        String [] stringArray = new String [tokenizedString.countTokens()];
        StringTokenizer tokenizedAgain;
        String str1;
        String str2;
        String token;
        for(int i =0; i< stringArray.length; i ++)
        {

            token = tokenizedString.nextToken();
            tokenizedAgain = new StringTokenizer(token, ",");
            tokenizedAgain.nextToken();
            str1 = tokenizedAgain.nextToken();
            str2 = tokenizedAgain.nextToken();
        }

如果有人能指出我正确的方向,那将非常有帮助。

我看过这个:Swift: Split a String into an array

还有这个:http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer

但我真的找不到关于 Swift 中字符串标记的其他资源。谢谢!

【问题讨论】:

    标签: ios string swift stringtokenizer


    【解决方案1】:

    这扩展了 Syed 的 componentsSeperatedByString 答案,但使用 Swift 的映射来创建请求的 Nx2 矩阵。

    let tokenizedString = "string 1, string 2, string 3, ^, string a, string b, string c, ^"
    let lines = tokenizedString.componentsSeparatedByString("^, ")
    let tokens = lines.map {
        (var line) -> [String] in
        let token = line.componentsSeparatedByString(", ")
        return [token[0], token[1]]
    }
    println(tokens)
    

    【讨论】:

      【解决方案2】:
      var delimiter = "^"
      var tokenDelimiter = ","
      var newstr = "string 1, string 2, string 3, ^, string 1, string 2, string 3,^"
      
      var line = newstr.componentsSeparatedByString(delimiter) // splits into lines
      let nl = line.count
      var tokens = [[String]]() // declares a 2d string array
      for i in 0 ..< nl {
          let x = line[i].componentsSeparatedByString(tokenDelimiter) // splits into tokens
          tokens.append(x)
      }
      
      println(tokens[0][0])
      

      【讨论】:

      • 您好,感谢您的回复!我尝试了你的代码,它背后的逻辑非常有见地......我从来没有想过制作一个二维数组......但是当我从二维数组中获取值时......“println(tokens [1] [0 ])" 是第 1 行 ..string 0.. 但指向第一个 "^" 分隔符...并且数组认为这是新行中的第一个条目...并且它还在控制台中打印空白。理想情况下,我希望“println(tokens[1][0])”打印“string 1”(第 2 行),但它在控制台中是空白的。但无论如何...再次感谢。非常感谢!!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多