从字符串中删除空格和多行?

我有一个字符串,像这样:

" \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n " 

我想结果是:

 "assddd\nadjffffdd\ntjhfhdf". 

1:我使用trimmingCharacters来删除开头和结尾:

 let title = " \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n".trimmingCharacters(in: .whitespacesAndNewlines) 

2:删除空格

 let result = title.replacingOccurrences(of: " ", with: "") 

但是,如何在角色之间保留第一个“\ n”并删除其他“\ n”?

您可以使用正则表达式找到两个或多个连续的换行符,并用一个换行符替换它们。 例:

 let s1 = "AA\n\nBB\nCC\n\n\n\n\nDD" let s2 = s1.replacingOccurrences(of: "\\n{2,}", with: "\n", options: .regularExpression) print(s1.debugDescription) // "AA\n\nBB\nCC\n\n\n\n\nDD" print(s2.debugDescription) // "AA\nBB\nCC\nDD" 

适用于您的案例:

 let title = " \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n " let result = title.trimmingCharacters(in: .whitespacesAndNewlines) .replacingOccurrences(of: " ", with: "") .replacingOccurrences(of: "\\n{2,}", with: "\n", options: .regularExpression) print(result.debugDescription) // "assddd\nadjffffdd\ntjhfhdf" 

可能的解决方案:

 let str = " \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n " print("str: \(str)") let str2 = str.replacingOccurrences(of: " ", with: "") print("str2: \(str2)") let lines = str2.components(separatedBy:"\n") print("lines: \(lines)") let linesFiltered = lines.filter({($0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)).count > 0}) print("linesFiltered: \(linesFiltered)") let linesTrimmed = linesFiltered.map({$0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)}) print("linesTrimmed: \(linesTrimmed)") let endStr = linesTrimmed.joined(separator: "\n") print("endStr:\n\(endStr)") print("endStr:\n\(endStr.debugDescription)") 

想法:
删除所有空格,因为您不需要它们。
获取由breakLine(“\ n”)分隔的所有行
因为如果重复需要重新组装它们,并将它们放在一个数组中
删除空行(只有空格和/或新行)
删除每行前后的空格/换行符(修剪)
重新组合字符串

这个输出:

 str: assddd adjf fff dd tjhfhdf str2: assddd adjffffdd tjhfhdf lines: ["", "assddd", "", "", "", "", "adjffffdd", "", "", "", "tjhfhdf", ""] linesFiltered: ["assddd", "adjffffdd", "tjhfhdf"] linesTrimmed: ["assddd", "adjffffdd", "tjhfhdf"] endStr: assddd adjffffdd tjhfhdf endStr: "assddd\nadjffffdd\ntjhfhdf" 

正如我在使用常规表达的评论中所说,你可以这样做,

 func stringByAdjustingString(text:String) ->String{ do{ let regex = try NSRegularExpression(pattern: "\\n+", options:[.dotMatchesLineSeparators]) let resultString = regex.stringByReplacingMatches(in: text, range: NSMakeRange(0, text.utf16.count), withTemplate: "\n") return resultString.replacingOccurrences(of: " ", with: "").trimmingCharacters(in: .whitespacesAndNewlines) } catch{ return "" } } 

输入: “\ n assddd \ n \ n \ n \ n \ n adjf fff dd \ n \ n \ n \ n tjhfhdf \ n”

输出: “assddd \ nadjffffdd \ ntjhfhdf”

  It should help you var str = " \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n " str = str.trimmingCharacters(in: .whitespacesAndNewlines) str = str.replacingOccurrences(of: " ", with: "") //str = str.replacingOccurrences(of: "\n\n", with: "\n") let array = str.components(separatedBy: "\n") var finalArray = [String]() for x in array { if !x.isEmpty { finalArray.append(x) } } str = finalArray.joined(separator: "\n") 

从您的示例文本开始,我们可以修改结尾:

 let sample = " \n assddd\n\n\n\n\n adjf fff dd \n\n\n\n tjhfhdf \n " let trimmedEnds = sample.trimmingCharacters(in: .whitespacesAndNewlines) 

如果您只想删除空格并压缩换行符:

 let noHorizSpace = trimmedEnds.replacingOccurrences(of: " ", with: "") // remove all spaces let singleVertSpace = noHorizSpace.replacingOccurrences(of: "\\n{2,}", with: "\n", options: .regularExpression) // squash runs of two or more newlines 

或者使用空格的正则表达式:

 let noHorizSpace = trimmedEnds.replacingOccurrences(of: " +", with: "", options: .regularExpression) let singleVertSpace = noHorizSpace.replacingOccurrences(of: "\\n{2,}", with: "\n", options: .regularExpression) 

但是(为了好玩?)所有Unicode水平(空格,制表符等)和垂直(换行符,换页符,段落分隔符等)怎么样? 为此,有RE模式\h\v

 let noHorizSpace = trimmedEnds.replacingOccurrences(of: "\\h+", with: "", options: .regularExpression) let singleVertSpace = noHorizSpace.replacingOccurrences(of: "\\v+", with: "\n", options: .regularExpression) 

可以使用单个正则表达式解决此问题,但最好注意ICU RE用户指南中的建议并使用多个更简单的RE。

您可以使用以下方法删除字符串中的空格

 yourString.trimmingCharacters(in: .whitespaces) 

或者如果你想要删除白色空格和线条

 yourString.trimmingCharacters(in: .whitespacesAndNewlines) 

我希望它能有所帮助!