D语言字符串分割:如何将连续空格视为单个分隔符并过滤空元素
D语言中按空白分割字符串并过滤空元素的内置方案
你不需要手动写filter加Lambda来处理,D标准库本身就有更简洁的内置方法满足需求:
1. 直接使用无参数的split()
当调用input.split()(不传任何分隔符参数)时,它会自动将任意连续的空白字符(包括空格、制表符、换行符等)视为单个分隔符,同时自动过滤掉分割产生的空元素,完美匹配你的示例需求:
import std.array; import std.stdio; void main() { string input = "This is a string"; auto output = input.split(); writeln(output); // 输出:["This", "is", "a", "string"] }
2. 仅按ASCII空格分割(排除其他空白字符)
如果你的需求是严格只以ASCII空格作为分隔符,不包含制表符、换行等其他空白,可以使用更精准的处理方式:
import std.array; import std.algorithm; import std.stdio; void main() { string input = "This is a string"; // 按单个空格分割后过滤空字符串 auto output = input.split(" ").filter!(s => !s.empty).array; // 或者用splitWhen实现更高效的连续空格处理 auto output2 = input.splitWhen!(c => c == ' ').filter!(s => !s.empty).array; writeln(output); // 输出同样符合预期 }
第一种无参数的split()是处理空白分割场景最简洁的方式,完全覆盖你示例中的连续空格需求,不需要额外过滤逻辑。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

