如何使用逗号和换行符对字符串进行标记化

5
我正在使用Swift制作一个简单的字符串分词器,就像在Java中一样...但是它对我来说确实行不通。
我的数据源的每行末尾都用“^”分隔,数据由逗号分隔。
例如:"string 1,string 2,string 3,^,string 1,string 2,string 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中不能找到其他关于字符串分词的资源。谢谢!
2个回答

6

这扩展了Syed's的componentsSeperatedByString答案,但使用Swift的map创建所请求的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)

enter image description here


0
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])"是第一行..字符串0..但指向第一个"^"分隔符...而数组认为这是新行中的第一个条目...并且在控制台中也打印为空白。理想情况下,我希望"println(tokens[1][0])"打印出"string 1"(第2行)但在控制台中为空白。但无论如何...再次感谢。非常感激!!! - stepheaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接