Java正则表达式除了last之外的所有字符

时间:2015-10-24 19:47:34

标签: regex

我想在每一封信之后放一个破折号,但我的正则表达式也在最后一点。我怎样才能提高我的正则表达式?

String outputS = dnaString.replaceAll("(.{1})", "$1-");

5 个答案:

答案 0 :(得分:5)

(.)(?!$)

您可以$1使用此。替换。请参阅演示。

https://regex101.com/r/gT6vU5/11

(?!$)使用否定前瞻来声明不捕获字符串末尾的字符。

答案 1 :(得分:3)

没有正则表达式(更快):

String[] nucleotides = dnaString.split("");
String outputS;

int seqLength = nucleotides.length;

if (seqLength > 1) {
    StringBuilder sb = new StringBuilder();
    sb.append(nucleotides[0]);

    for (int i = 1; i < seqLength; i++) {
       sb.append("-");
       sb.append(nucleotides[i]);
    }

    outputS = sb.toString();
} else {
    outputS = dnaString;
}

答案 2 :(得分:1)

我知道这是一个老问题,但为了完整性和未来参考,我想补充一下这个答案。

在Java 8中,您还可以使用:

String.join("-",dnaString.toCharArray());

说明:

String.join(delimiter,objects...);
String.join(delimiter,array);
String.join(delimiter,Iterable);

这些用于将所有对象连接到单个字符串,并使用分隔符作为分隔符。

dnaString.toCharArray();

这是一个将String作为char数组的方法。

答案 3 :(得分:0)

这会用下划线'_'替换所有特殊字符,但最后一次在字符串中出现特殊字符。

String name = "one-of-the dummy$ string:i.txt";  // input
name = name.replaceAll("[^a-zA-Z0-9](?=.*[^a-zA-Z0-9])", "_");
System.out.println(name); 

//input: one-of-the dummy$ string:i.txt
//output: one_of_the_dummy__string_i.txt

答案 4 :(得分:0)

(.)\B

与最后一个字符不匹配。

请参见https://regex101.com/r/p0Z0zA/1

因此,您的情况应该是:

String outputS = dnaString.replaceAll("(.{1})\\B", "$1-");

归功于Pigreco。