如何将反向域表示法转换为PascalCase?

时间:2018-01-19 12:41:11

标签: string rust converter

我想将func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { if tabBarController.selectedIndex == 2{ tabBarController.selectedIndex = 0 let alert = UIAlertController(title: "Do something", message: "With this", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "A thing", style: .default) { action in }) self.present(alert, animated: true, completion: { }) } } 转换为"foo.bar.baz"。我的输入始终只是ASCII。我试过了:

"FooBarBaz"

但这感觉效率低下。

2 个答案:

答案 0 :(得分:4)

您的解决方案是一个良好的开端。您可以在没有堆分配的情况下使其工作在" functional"样式;我更喜欢将复杂的逻辑放入普通的for循环中。

此外,我不想假设输入是ASCII而不实际检查 - 这应该适用于任何字符串。

您可能还可以在代码中使用String::with_capacity以避免在标准情况下重新分配。

Playground

fn dotted_to_pascal_case(s: &str) -> String {
    let mut result = String::with_capacity(s.len());
    for part in s.split('.') {
        let mut cs = part.chars();
        if let Some(c) = cs.next() {
            result.extend(c.to_uppercase());
        }
        result.push_str(cs.as_str());
    }
    result
}

fn main() {
    println!("{}", dotted_to_pascal_case("foo.bar.baz"));
}

答案 1 :(得分:3)

Stefan的回答是正确的,但我决定摆脱第一个If TargetTable.DataBodyRange.Height Then TargetTable.DataBodyRange.Copy OutputPasteRange 分配,并且完全正常运行,没有循环:

String