1

我做了一个只有项目符号的文本视图。它的工作原理就像 word 中的项目符号列表。现在我正在使用此代码创建一个数组,以通过项目符号 (\u2022) 分隔字符串

//get the text inside the textView
NSString *textContents = myTextView.text;

//make the array
NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

//print out array 
NSLog(@"%@",bulletedArray);  

它可以完美地通过项目符号将文本分成组件,但它保留了第一行,其中没有任何内容。所以当它打印出来时,它看起来像这样。

"",
"Here is my first statement\n\n",
"Here is my second statement.\n\n",
"This is my third statement. "

数组的第一个组件是“”(无)。有没有办法避免添加等于 nil 的组件?

谢谢。

4

3 回答 3

1

可悲的是,这是工作componentsSeparatedBy...方法的方式NSString

分隔符的相邻出现会在结果中产生空字符串。同样,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。

由于您知道第一个元素将始终为空,因此您可以从 element 开始创建一个子数组1

NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];
NSUInteger len = bulletedArray.count;
if (bulletedArray.count) {
    bulletedArray = [bulletedArray subarrayWithRange:NSMakeRange(1, len-1)];
}

或者,您可以substringFromIndex:在将字符串传递给方法之前使用从字符串中删除初始项目符号字符componentsSeparatedByString:

NSArray *bulletedArray = [
    [textContents substringFromIndex:[textContents rangeOfString:@"\u2022"].location+1]
    componentsSeparatedByString:@"\u2022"];
于 2012-08-07T13:28:52.417 回答
0

虽然您的项目符号列表总是在索引 1 上有一个项目符号,但您可以简单地从字符串中删除第一个索引:

//get the text inside the textView
if (myTextView.text.length > 1) {
    NSString *textContents =[myTextView.text substringFromIndex:2];

    //make the array
    NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

    //print out array    
    NSLog(@"%@",bulletedArray);     
}

当然,您应该避免使用空文本,而这会导致 arrayOutOfBounds 异常。

于 2012-08-07T13:56:45.197 回答
0
[[NSMutableArray arrayWithArray:[textContents componentsSeparatedByString:@"\u2022"]] removeObjectIdenticalTo:@""];

这应该够了吧

于 2012-08-07T13:28:42.577 回答