Java 如果字符串包含字符,是否添加分隔符?
我试图找出如何使用循环在发现字符串s包含字母a-F之前附加分隔符“:” 如果我有s=“10584f”,那么我希望输出为“10584:f”Java 如果字符串包含字符,是否添加分隔符?,java,string,loops,for-loop,Java,String,Loops,For Loop,我试图找出如何使用循环在发现字符串s包含字母a-F之前附加分隔符“:” 如果我有s=“10584f”,那么我希望输出为“10584:f” 我应该怎么做呢?这是一个简单的解决方案,可以检查它是否包含a到f之间的字母,并相应地放置“:” public static void main(String[] args) { String s = "10584f"; String newString = "";
我应该怎么做呢?这是一个简单的解决方案,可以检查它是否包含a到f之间的字母,并相应地放置“:”
public static void main(String[] args) {
String s = "10584f";
String newString = "";
for(int i=0;i<s.length();i++) {
if((int)s.charAt(i)>= (int)'a' && (int)s.charAt(i)<= (int)'f') {
newString = newString + ":" + s.charAt(i);
}else {
newString = newString + s.charAt(i);
}
}
System.out.println(newString);
}
publicstaticvoidmain(字符串[]args){
字符串s=“10584f”;
字符串newString=“”;
对于(int i=0;i=(int)'a'&(int)s.charAt(i)您需要检查每个字符的ASCII
代码,并在此条件下在其前面附加分隔符:
public class Main {
public static void main(String[] args) {
String s = "10584f";
System.out.println(appendDelimiter(s));
}
private static String appendDelimiter(String s) {
StringBuilder sb = new StringBuilder();
for(char c : s.toCharArray()) {
int charCode = (int) c;
if((charCode >= 65 && charCode <= 70) || (charCode >= 97 && charCode <= 102))
sb.append(":");
sb.append(c);
}
return sb.toString();
}
}
如果目标字符串由数字和a-F
或a-F
中的单个字母组成,一个简单的解决方案是:替换正则表达式匹配项,(\\d+)([a-Fa-F])
。这个正则表达式表示由数字和组(2)组成的组(1)
由来自a-F
或a-F
的字母组成。regex可以替换为$1:$2
,其中$1
和$2
分别指定组(1)
和组(2)
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "10584f", "12345A", "13456b", "23456F" };
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i].replaceAll("(\\d+)([A-Fa-f])", "$1:$2");
}
// After replacement
System.out.println(Arrays.toString(arr));
}
}
但是,如果字符串可以有多个字母后跟数字,并且希望每个字母前面都有一个:
,则可以从索引1
开始迭代字符串,直到字符串的最后一个字符,如果遇到一个字母,则使用:
作为函数中的前缀,withColonBe大写字母
如下所示:
演示:
[10584:f, 12345:A, 13456:b, 23456:F]
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "10584f", "12345A", "13456b", "23456F", "1abc", "123aBc" };
for (int i = 0; i < arr.length; i++) {
arr[i] = withColonBeforeLetters(arr[i]);
}
// After replacement
System.out.println(Arrays.toString(arr));
}
static String withColonBeforeLetters(String s) {
StringBuilder sb = new StringBuilder();
// Put the first letter into sb
sb.append(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char ch = s.charAt(i);
if ((ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) {
sb.append(':').append(ch);
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
[10584:f, 12345:A, 13456:b, 23456:F, 1:a:b:c, 123:a:B:c]
像“1abc”
这样的字符串怎么样?它应该变成1:abc
或1:a:b:c
或其他什么?输入的长度是固定的还是不固定的?它应该是1:a:b:c输入的长度不是固定的,它将依赖于用户输入str=str.replaceAll(“[a-fA-F]”,“:$0”);
使用StringBuilder。
[10584:f, 12345:A, 13456:b, 23456:F, 1:a:b:c, 123:a:B:c]