缩短Chars之间的字符串,直到达到最大字符长度

时间:2018-04-24 16:08:38

标签: java string

在我的GUI中我通过JLabel显示路径字符串,并且当单击标签时,MouseListener会打开文件夹。 我希望缩短第一个目录斜杠之间和之后显示的字符串,直到整个字符串处于一定长度,例如20。

e.g.:
String regularPath="C:\Users\xy\Desktop\d1\d2\d3\d4\d5"; //->34 chars
String newPath=    "C:\...\d1\d2\d3\d4 " //->20 chars

我目前无法找出实现此目的的逻辑,我将非常感谢您的帮助(indexof(“\\”)始终导致OutOfBoundsException)。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您的问题是使用l​​ookarounds进行正则表达式替换的理想选择。您可以在以下模式中找到,并用省略号替换。

(?<=\w:\\).*?(?=.{0,14}$)

(?<=\w:\\)   assert that a drive letter pattern (e.g. C:\) precedes
.*?          match and consume everything until
(?=.{0,14}$) we see 14 more characters in the rest of the path

请注意,.*?数量是用省略号替换的,但任何一方的所有内容都保持原样。此外,总共短于20个字符的路径将不匹配此模式,因此将完整打印。

String regularPath = "C:\\Users\\xy\\Desktop\\d1\\d2\\d3\\d4\\d5";
regularPath = regularPath.replaceAll("(?<=\\w:\\\\).*?(?=.{14}$)", "...");
System.out.println(regularPath);

C:\...d1\d2\d3\d4\d5

Demo