在我的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)。提前谢谢!
答案 0 :(得分:2)
您的问题是使用lookarounds进行正则表达式替换的理想选择。您可以在以下模式中找到,并用省略号替换。
(?<=\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