如何删除字符串的某些部分?

时间:2019-01-28 08:17:36

标签: java regex

我必须删除字符串的某些部分,例如:

customers/00000000-0000-0000-0000-000000000111/areas/00000000-0000-0000-0000-000000000222/orders/00000000-0000-0000-0000-000000000555/invoices/00000000-0000-0000-0000-000000000777/employees/00000000-0000-0000-0000-000000000213.gz

获取不带uuid但具有文件扩展名的路径。看起来应该像

customers/areas/orders/invoices/employees/.gz

我该怎么做?使用Matcher或子字符串?哪个是最佳选择?是否可以使用自定义正则表达式从字符串中删除UUID?

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式替换字符串:

(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}

答案 1 :(得分:1)

假设您的UUID只是带负号的数字,则可以使用如下正则表达式

[0-9][-0-9]*[0-9][\/]?

替换类似的字符串

00000000-0000-0000-0000-000000000111/
00000000-0000-0000-0000-000000000222/
00000000-0000-0000-0000-000000000555/
00000000-0000-0000-0000-000000000213
...

带有空字符串,如以下代码所示:

String path = ...;
// Note the additional \ in the following string, 
// this is necessary because we are using a string to represent the regexp
System.out.println(path.replaceAll("[0-9][-0-9]*[0-9][\\/]?", ""));

可打印

customers/areas/orders/invoices/employees/.gz

答案 2 :(得分:0)

您可以尝试 Apache Commons IO

中的 FilenameUtils.getExtension

(您可以指定完整路径或仅指定文件名):

String ext1 = FilenameUtils.getExtension("customers/00000000-0000-0000-0000-000000000111/areas/00000000-0000-0000-0000-000000000222/orders/00000000-0000-0000-0000-000000000555/invoices/00000000-0000-0000-0000-000000000777/employees/00000000-0000-0000-0000-000000000213.gz"); // returns "gz"
String ext2 = FilenameUtils.getExtension("002345620000000213.txt"); // returns "txt"