Java 正则表达式将2个字符替换为1个字符
我想使用正则表达式解决以下问题:Java 正则表达式将2个字符替换为1个字符,java,regex,string,Java,Regex,String,我想使用正则表达式解决以下问题: SOME_RANDOM_TEXT 应转换为: someRandomText 因此,应该用大写字母替换_(any char)。我发现了类似的东西,使用: 如何仅从替换者处获得第二封信??有什么建议吗?谢谢。简单地将字符串拆分(“”),然后重新加入,将集合中每个字符串的第一个字母大写,可能会更容易 请注意,Apache Commons有许多有用的字符串相关内容,包括一个)方法。简单地将string.split(“”),然后重新连接,将集合中每个字符串的第一个字母
SOME_RANDOM_TEXT
应转换为:
someRandomText
因此,应该用大写字母替换_(any char)。我发现了类似的东西,使用:
如何仅从替换者处获得第二封信??有什么建议吗?谢谢。简单地将字符串拆分(“”),然后重新加入,将集合中每个字符串的第一个字母大写,可能会更容易
请注意,Apache Commons有许多有用的字符串相关内容,包括一个)方法。简单地将
string.split(“”)
,然后重新连接,将集合中每个字符串的第一个字母大写可能会更容易
注意,ApacheCommons有很多有用的字符串相关的东西,包括一个)方法。您也可以编写一个简单的方法来实现这一点。它更复杂,但更优化:
public static String toCamelCase(String value) {
value = value.toLowerCase();
byte[] source = value.getBytes();
int maxLen = source.length;
byte[] target = new byte[maxLen];
int targetIndex = 0;
for (int sourceIndex = 0; sourceIndex < maxLen; sourceIndex++) {
byte c = source[sourceIndex];
if (c == '_') {
if (sourceIndex < maxLen - 1)
source[sourceIndex + 1] = (byte) Character.toUpperCase(source[sourceIndex + 1]);
continue;
}
target[targetIndex++] = source[sourceIndex];
}
return new String(target, 0, targetIndex);
}
publicstaticstringtocamelcase(字符串值){
value=value.toLowerCase();
byte[]source=value.getBytes();
int maxLen=source.length;
字节[]目标=新字节[maxLen];
int targetIndex=0;
对于(int-sourceIndex=0;sourceIndex
我喜欢ApacheCommons库,但有时了解它的工作原理并能够为这样的工作编写一些特定的代码是件好事。您也可以编写一个简单的方法来完成这项工作。它更复杂,但更优化:
public static String toCamelCase(String value) {
value = value.toLowerCase();
byte[] source = value.getBytes();
int maxLen = source.length;
byte[] target = new byte[maxLen];
int targetIndex = 0;
for (int sourceIndex = 0; sourceIndex < maxLen; sourceIndex++) {
byte c = source[sourceIndex];
if (c == '_') {
if (sourceIndex < maxLen - 1)
source[sourceIndex + 1] = (byte) Character.toUpperCase(source[sourceIndex + 1]);
continue;
}
target[targetIndex++] = source[sourceIndex];
}
return new String(target, 0, targetIndex);
}
publicstaticstringtocamelcase(字符串值){
value=value.toLowerCase();
byte[]source=value.getBytes();
int maxLen=source.length;
字节[]目标=新字节[maxLen];
int targetIndex=0;
对于(int-sourceIndex=0;sourceIndex
我喜欢Apache commons库,但有时了解它的工作原理并能够为这样的作业编写一些特定的代码是很好的。问题是不支持从小写到大写的大小写转换
这意味着您需要按照Brian的建议以编程方式进行转换。另请参见问题在于
这意味着您需要按照Brian的建议以编程方式进行转换。另请参见一些语言有允许您修改反向引用的标志(例如.\u将相邻的反向引用转换为小写),我不知道您在Java中是否有这样的标志。如果regex是一个选项,您将在regex中使用
([A-Za-z])
或(\p{L})
,在替换字符串中使用$1
。括号捕获组#1中的字母(假设它是第一组参数),并且$1
在替换字符串中充当该组的占位符。(\w
不正确,因为它除了匹配字母外还匹配数字和下划线,\p{L}
比[A-Za-z]
更正确,因为它匹配的是Unicode字母,而不仅仅是ASCII。)某些语言具有允许您修改反向引用的标志(例如将相邻的反向引用转换为小写),我不知道在Java中是否有,如果regex是一个选项,那么在regex中使用([A-Za-z])
或(\p{L})
,在替换字符串中使用$1
。括号捕获组#1中的字母(假设它是第一组参数),并且$1
在替换字符串中充当该组的占位符。(\w
是不正确的,因为它除了匹配字母外还匹配数字和下划线,\p{L}
比[A-Za-z]
更正确,因为它匹配的是Unicode字母,而不仅仅是ASCII。)谢谢,我真的不明白lookback应该如何处理replacment部分($&)…我已经删除了对lookbehinds的引用,因为上面的方法更简单/更不容易出错等。谢谢,我真的不明白lookbehind应该如何与replacment部分(美元和)一起工作…我已经删除了对lookbehinds的引用,因为上述方法更简单/更不容易出错等@immerhart只有在默认编码为每个字符一个字节(如ASCII、ISO-8859-1或类似编码)时才有效。任何Unicode编码都会失败。但最重要的是,完全没有理由这样设计,正确的解决方案将使用相同数量的代码。@immerhart如果您认为需要,这个解决方案可以很容易地修复。如何解决?没有使用byte[],char[]?哎呀,我的错。你说得对,我以为他只需要单字节字符。而且,使用tocharray确实要好得多。您甚至不需要tocharray()
;只需使用charAt()
对原始字符串进行迭代,然后使用StringBuilder创建新字符串。@immerhart只有在默认编码为每个字符一个字节(如ASCII、ISO-8859-1或类似编码)时,它才起作用。任何Unicode编码都会失败。但最重要的是,完全没有理由这样设计,正确的解决方案将使用相同数量的代码。@immerhart如果您认为需要,这个解决方案可以很容易地修复。如何解决?没有使用byte[],char[]?哎呀,我的错。你说得对,我以为他只需要单字节字符。而且,使用ToCharray确实要好得多。您甚至不需要t