Java正则表达式:需要更简单的解决方案
我不熟悉正则表达式。我有一个名为Java正则表达式:需要更简单的解决方案,java,regex,replaceall,Java,Regex,Replaceall,我不熟悉正则表达式。我有一个名为encryptId(不包含|)的字符串,我想使用Java中的encryptId.replace/replaceAll(Regex,Pattern)函数,在该字符串的每20个字符后附加字符。但是它不应该在字符串的末尾有\ String s = "..."; //your string int i = 0; StringBuilder res = new StringBuilder(""); for (char c : s.toChar
encryptId
(不包含|
)的字符串,我想使用Java中的encryptId.replace/replaceAll(Regex,Pattern)
函数,在该字符串的每20个字符后附加
字符。但是它不应该在字符串的末尾有\
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
谢谢你的帮助
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
编辑:
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
replace
和replaceAll
函数,特别是因为我必须在中使用它。在那里,我们可以使用普通的字符串函数,但不能编写完整的java代码 String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
我需要去掉这个if
语句,这样它就只是一个字符串函数。您可以使用:
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
res
将使您的第一个字符串每20个字符有一个
,但不在字符串的末尾您问如何使用replaceAll
:我说不要。正则表达式并不总是解决字符串操作问题的最佳方法
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
通过从encryptId
中获取20个字符块并将其附加到StringBuilder
,可以有效地构建新字符串,如果管道不在字符串末尾,可以选择附加管道:
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
String method(String encryptId) {
StringBuilder sb = new StringBuilder(encryptId.length() + encryptId.length() / 20);
for (int i = 0; i < encryptId.length(); i += 20) {
int end = Math.min(i + 20, encryptId.length());
sb.append(encryptId, i, end);
if (end != encryptId.length()) {
sb.append('|');
}
}
return sb.toString();
}
字符串方法(字符串加密ID){
StringBuilder sb=新的StringBuilder(encryptId.length()+encryptId.length()/20);
对于(int i=0;i
正则表达式可能会使事情更加复杂。您也可以尝试使用StringBuilder
来执行以下操作:
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
String encryptId = "test";
StringBuilder builder = new StringBuilder(encryptId);
int insertAfter = 20;
for(int i = encryptId.length(); i > 0 ; i--) {
if (i % insertAfter == 0 && i != encryptId.length()) {
builder.insert(i, "|");
}
}
这可以通过如下正则表达式实现
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
static String enterADelimiter(String str, String delimiter, int after) {
String regex = "(.{" + after +"})(?!$)";
String replacement = "$1" + delimiter;
return str.replaceAll(regex, replacement);
}
只用
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
enterADelimiter(yourString, "|", 20)
这将返回正确的解决方案。解释
String s = "..."; //your string
int i = 0;
StringBuilder res = new StringBuilder("");
for (char c : s.toCharArray()){
res.append(c);
i++;
if (i % 20 == 0 && i != s.length()){
res.append("|");
}
}
System.out.println(res.toString());
( Start group 1
. Match Anything
{after} after times
) End group 1
(?!$) Don't match if at end of String
为什么要特别使用replace
或replaceAll
?我认为使用StringBuilder
会容易得多。需要更简单的解决方案吗?向我们展示您当前的解决方案。@PhilippSander,我在编辑中指定了该解决方案。@ArunBhati第二部分有什么问题?问题是您不能使用子字符串还是不能使用字符?@PaulBoddington,我只是认为从正则表达式本身我们可以删除if语句。这不会编译,在更正错误后,|
可以位于字符串的末尾。@PaulBoddington已修复。谢谢。这是最有效的解决方案。请注意,在<代码> StringBuilder < /COD>中间插入一个字符是二次的,因为它涉及转移所有以下字符。请注意,您希望避免在循环中连接字符串,因为它会创建中间字符串。将字符附加到StringBuilder
@AndyTurner更有效。我不确定编译器是否会对此进行优化并在引擎盖下使用StringBuilder。谢谢@Aseem,它成功了。“我对你的答案投了赞成票,但看不见。”海盗杰克再试一次。这一次可能有效:D.如果有效,你可以接受答案。记号。哦!因为我没有足够的声誉,所以在我得到足够的声誉之前,它不会被显示出来。@Pirate_Jack我完全忘记了有这个限制。但你应该能够接受。请参阅以了解如何使用。