我想在每一封信之后放一个破折号,但我的正则表达式也在最后一点。我怎样才能提高我的正则表达式?
String outputS = dnaString.replaceAll("(.{1})", "$1-");
答案 0 :(得分:5)
答案 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。