Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果字符串包含字符,是否添加分隔符?_Java_String_Loops_For Loop - Fatal编程技术网

Java 如果字符串包含字符,是否添加分隔符?

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 = "";

我试图找出如何使用循环在发现字符串s包含字母a-F之前附加分隔符“:”

如果我有s=“10584f”,那么我希望输出为“10584:f”


我应该怎么做呢?

这是一个简单的解决方案,可以检查它是否包含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]