8

在这里截断一个字符串是我正在使用的:

String test1 = "this is test truncation 1.pdf";     
String p1 = test1.substring(0, 10) + "...";
System.out.println(p1);

输出是 'this is te...' 如何访问文件扩展名以便输出变为:'this is te... pdf' 我可以使用子字符串方法访问最后三个字符,但其他文件扩展名可能是长度为 4 个字符,例如 .aspx

有没有我可以使用的正则表达式,以便“这是测试截断 1.pdf”变成“这是 te...pdf”

4

7 回答 7

7

您可以通过这样的快速正则表达式替换来完成所有操作:

test1.replaceAll("(.{0,10}).*(\\..+)","$1...$2")
于 2012-12-20T10:54:52.543 回答
2

像这样做 :

String[] parts = test1.split("\\.");
String ext = parts[parts.length-1];
String p1 = test1.substring(0, 10) + "..."+ext;
System.out.println(p1);
于 2012-12-20T10:49:53.870 回答
2

你可以简单地使用

test1.substring(0, 10) + "..." + test1.substring(test1.lastIndexOf('.'))
于 2012-12-20T10:52:25.837 回答
0

对于这个简单的任务,您不需要 Regex

String p1 = test1.substring(0, 10) + "..." + test1.substring(test1.lastIndexof('.'));
于 2012-12-20T10:47:13.183 回答
0

试试这个 -

String test1 = "this is test truncation 1.pdf";
String[] test2 = test1.split("\\.");     
String p1 = test1.substring(0, 10) + "..." + test2[test2.length-1];
System.out.println(p1);
于 2012-12-20T10:47:17.993 回答
0

你可以使用.+[.](.*?)

这匹配所有字符,包括点,然后是点,然后是任何字符,但不是贪心的,所以第一部分应该抓住最后一个点之前的所有字符串。捕获组将允许您检索所需的部分。

于 2012-12-20T10:48:31.437 回答
0

我使用这种方法,但只有当你有单个“。”时它才会起作用。还有一个也用于文件扩展名。可能这是一种新手方法,因为你也可以使用 String 类的 split 方法......

    String str="abcdefg ghi.pdf";
    int dotIndex=str.indexOf(".")+1;
    if(str.indexOf(" ", dotIndex)!=-1)
        System.out.println(str.substring(dotIndex,str.indexOf(" ", dotIndex) ));
    else
    {
        System.out.println(str.substring(dotIndex,str.length() ));
    }
于 2012-12-20T10:59:06.590 回答