我想在每个字母后面放置一个破折号,但是我的正则表达式也会在末尾放置一个破折号。如何改进我的正则表达式?
String outputS = dnaString.replaceAll("(.{1})", "$1-");
String outputS = dnaString.replaceAll("(.{1})", "$1-");
(?!$)
吗? - ocram(?!X)
通过零宽度负向先行断言匹配 X。 - Andreas没有正则表达式(更快):
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;
}
我知道这是一个老问题,但为了完整性和将来的参考,我想补充一下这个答案。
在Java 8中,您也可以使用:
String.join("-",dnaString.toCharArray());
解释:
String.join(delimiter,objects...);
String.join(delimiter,array);
String.join(delimiter,Iterable);
dnaString.toCharArray();
这将把字符串中除了最后一个特殊字符外的所有特殊字符替换为下划线'_'。
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
这个
(.)\B
不匹配最后一个字符。
查看 https://regex101.com/r/p0Z0zA/1
因此,在你的情况下,应该是:
String outputS = dnaString.replaceAll("(.{1})\\B", "$1-");
鸣谢pigreco。
outputS = dnaString.replaceAll("[\\p{L}\\p{M}](?!$)", "$0-");
。 - Wiktor Stribiżewjava
标签吗? - SwiftArchitect