gpt4 book ai didi

java - 如何更改两个字符串之间的字符?

转载 作者:行者123 更新时间:2023-12-01 19:29:17 26 4
gpt4 key购买 nike

我想用第二个字符串中的另一个字符更改字符串中的一个字符,距离为3。

例如:
字符串 s1:abc,字符串 s2:abcdef->s2 将变为 abadef 然后 -> abadeb。

如果可能的话,第一个 String 中的所有字符都应该转到第二个 s2。我必须提到,第一个字符串中的大写字母应该是小写字母,并且只会从第一个字符串中取出字母。我知道字符串是不可变的

public static void Encrypt(String s1, String s2) {
s1 = s1.toLowerCase();
StringBuilder finalS2 = new StringBuilder();
finalS2.append(s2);

for (int i = 0; i < finalS2.length(); i++) {

if (s1.charAt(i) >= 'a' && s1.charAt(i) <= 'z') {

finalS2.setCharAt(i + 2, s1.charAt(0));

break;
}
}

System.out.println(finalS2);
}

我认为在我的方法中,我认为这不是一个好主意,我应该为 s1 放置另一个 for 循环并在某个地方休息。我尝试了很多方法,用charArray等,但没有成功。

最佳答案

因此,您想要获取 s2 的原始文本,并将每隔三个字符替换为 s1 中的字符:

s1: abc
││└───── ignored
│└───┐
└─┐ │
s2: abcdef

进行增量单字符替换的最佳方法是获取原始字符串 (s2) 的 char[],替换适当的字符,然后构建由此产生的字符串。

public static String encrypt(String s1, String s2) {
char[] buf = s2.toCharArray();
for (int i = 0, j = 2; i < s1.length() && j < buf.length; i++, j += 3) {
buf[j] = Character.toLowerCase(s1.charAt(i));
}
return new String(buf);
}

测试

System.out.println(encrypt("abc", "abcdef"));

输出

abadeb

如果您希望代码处理来自 Unicode 补充平面的字符,例如表情符号,那么您需要使用代码点。

您还提到您只需要来自 s1 的字母,因此我们会将其添加到下一个版本(codePoints() 需要 Java 9+)

public static String encrypt(String s1, String s2) {
int[] c1 = s1.codePoints().toArray();
int[] c2 = s2.codePoints().toArray();
for (int i = 0, j = 2; i < c1.length && j < c2.length; i++) {
if (Character.isLetter(c1[i])) {
c2[j] = Character.toLowerCase(c1[i]);
j += 3;
}
}
return new String(c2, 0, c2.length);
}

测试

System.out.println(encrypt("abc", "abcdef"));
System.out.println(encrypt("a😈c👿e", "a😀c😃e😄g😁i😆k😅m🤣"));

输出

abadeb
a😀a😃ecg😁e😆k😅m🤣

如您所见,s1 中的表情符号字符被跳过,因为它们不是“字母”,并且 s2 中的表情符号被正确替换。尽管 😄s2 中占据了 2 个 char 位置,但它被正确替换为 c,单个 char 值。

关于java - 如何更改两个字符串之间的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60280325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com