String s = S.fmt("hello %s", "world"); // hello world
s = S.msgFmt("hello {0}", "world"); // hello world
4. 字串验证
String s = S.requireNotEmpty("foo"); // foo
s = S.requireNotBlank("bar"); // bar
s = S.requireNotEmpty(""); // raise IllegalArgumentException
s = S.requireNotBlank(" "); raise IllegalArgumentException
5. 字串长度
int n = S.len("abc"); // 3
n = S.len(null); // 0
6. 字串分割
List<String> list = S.fastSplit("/tmp/foo/bar", "/"); [tmp, foo, bar]
S.List list = S.split("abc5xyz132ijk", ":"); [abc, xyz, ijk]
list = S.split("/tmp/foo/bar").by("/").get(); [tmp, foo, bar]
list = S.split("[abc]-[xyz]").by("-").stripElementWrapper(S.BRACKETS).get(); // [abc, xyz]
7. 字串拼接
7.1 集合拼接为字串
List<String> list = C.list("abc", "xyz");
String s = S.join(list).by("-").get(); // abc-xyz
s = S.join(list).by("-").wrapElementWith(S.SQUARE_BRACKETS).get(); // [abc]-[xyz]
list = S.list("abc", null, "xyz");
S.join(list).by("-").get(); // abc--xyz
S.join(list).by("-").ignoreEmptyElement().get(); // abc-xyz
7.2 任意类型对象拼接为字串
String s = S.concat("abc", 123); // abc123
s = S.concat("abc", null, 123); // abc123
final String s = "1011101111";
eq(3, S.count("11").in(s));
eq(5, S.count("11").withOverlap().in(s));
17. 其他工具
eq("", S.trim(null));
eq("abc", S.trim(" abc"));
eq("abc\nxyz", S.dos2unix("abc\n\rxyz"));
eq("abc\n\rxyz", S.unix2dos("abc\nxyz"));
eq("this...", S.maxLength("this is a long text", 4));
yes(S.eq("foo", "foo"));
String s;
s = S.uuid(); // 9b2ec83d-15df-4746-9689-c82df5643832
s = S.random(); //kGYH$KCj
s = S.random(2); // gb
s = S.maxLength("this is a long text", 4); // this...
在 [OSGL 工具库 - 图片处理的艺术] (https://my.oschina.net/greenlaw110/blog/1786151) 中我们介绍了如何通过 OSGL Img 提供的一套 API 流畅地处理图片, 例如:
采用这种方式编写的代码极大地提高了可读性, 我们把这种 API 结构称为流式编程 (Fluent Programming). 我们在本文中将介绍如何使用 OSGL S 库处理字串, 包括采用流式编程来提供具有高可读性的字串处理代码.
下面用代码来说明一切:
1. 字串判断
1.1 判断字串是否为空
1.2. 判断字串是否为数字
1.3 字串判断的流式编程
2. 字串相等性
3. 字串格式化
4. 字串验证
5. 字串长度
6. 字串分割
7. 字串拼接
7.1 集合拼接为字串
7.2 任意类型对象拼接为字串
7.3 路径拼接
9. 字串修饰确认
10. 字串替换
11. 字串重复
12. 字串包裹
13. 字串去包裹
14. 字串切断
15. 关键字处理
16. 子串计数
17. 其他工具