Java-基于旧字符串和延迟生成新字符串
我需要在旧字符串和延迟的基础上得到一个新字符串。基本上,我有一个字母表的字符串(s=“abc…xyz”),并且基于滞后(即3),新字符串应该将我键入的字符串中的字符替换为向前放置的字符(滞后)。比如说,如果我键入“cde”作为字符串,那么输出应该是“fgh”。如果在字符串中添加了任何其他字符(除了空格-“”),则应将其删除。以下是我尝试过的,但不起作用:Java-基于旧字符串和延迟生成新字符串,java,string,replace,char,Java,String,Replace,Char,我需要在旧字符串和延迟的基础上得到一个新字符串。基本上,我有一个字母表的字符串(s=“abc…xyz”),并且基于滞后(即3),新字符串应该将我键入的字符串中的字符替换为向前放置的字符(滞后)。比如说,如果我键入“cde”作为字符串,那么输出应该是“fgh”。如果在字符串中添加了任何其他字符(除了空格-“”),则应将其删除。以下是我尝试过的,但不起作用: String code = "abcdefghijklmnopqrstuvwxyzabcd"; //my lag is 4 and I ad
String code = "abcdefghijklmnopqrstuvwxyzabcd"; //my lag is 4 and I added the first 4 characters to
char old; //avoid OutOfRange issues
char nou;
for (int i = 0; i < code.length() - lag; ++i)
{
old = code.charAt(i);
//System.out.print(old + " ");
nou = code.charAt(i + lag);
//System.out.println(nou + " ");
// if (s.indexOf(old) != 0)
// {
s = s.replace(old, nou);
// }
}
String code=“abcdefghijklmnopqrstuvxyzabcd”//我的延迟是4,我将前4个字符添加到
焦老//避免超出范围的问题
查尔诺;
对于(int i=0;i
我对old和nou(new,但是保留字)的输出进行了注释,因为我只使用它们来测试从位置I到I+lag的代码是否正常工作(确实如此),但是如果我取消对if语句的注释,它不会做任何事情,我将其保持为这样,它会继续执行for statment for code.length()中的指令,但是我的绳子不需要这么长。我也试着做下面的陈述,但我迷路了
for (int i = 0; i < s.length(); ++i)
{
....
}
for(int i=0;i
你能帮我做这个吗?或者是关于我应该如何思考算法的一些建议
谢谢 它不起作用,因为,正如上面所说: 返回一个新字符串,该字符串是将该字符串中所有出现的oldChar替换为newChar后生成的 (强调矿山) 因此,当您第一次在字符串中遇到'a'时,您将用'd'替换'a'。但是,然后你转到下一个字符,如果它是一个“d”,之前是一个“a”,那么你再次替换它,等等 您根本不应该使用
replace()
。相反,您只需使用StringBuilder通过追加原始字符串的每个移位字符来构建一个新字符串:
String dictionary = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(input.length());
for (int i = 0; i < input.length(); i++) {
char oldChar = input.charAt(i);
int oldCharPositionInDictionary = dictionary.indexOf(oldChar);
if (oldCharPositionInDictionary >= 0) {
int newCharPositionInDictionary =
(oldCharPositionInDictionary + lag) % dictionary.length();
sb.append(dictionary.charAt(newCharPositionInDictionary));
}
else if (oldChar == ' ') {
sb.append(' ');
}
}
String result = sb.toString();
String dictionary=“abcdefghijklmnopqrstuvwxyz”;
StringBuilder sb=新的StringBuilder(input.length());
对于(int i=0;i=0){
int newcharpositionindicationary=
(oldcharpositionindicationary+lag)%dictionary.length();
某人追加(字典字符(新字符);
}
else if(oldChar==''){
某人附加(“”);
}
}
字符串结果=sb.toString();
它不起作用,因为正如上面所说:
返回一个新字符串,该字符串是将该字符串中所有出现的oldChar替换为newChar后生成的
(强调矿山)
因此,当您第一次在字符串中遇到'a'时,您将用'd'替换'a'。但是,然后你转到下一个字符,如果它是一个“d”,之前是一个“a”,那么你再次替换它,等等
您根本不应该使用replace()
。相反,您只需使用StringBuilder通过追加原始字符串的每个移位字符来构建一个新字符串:
String dictionary = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(input.length());
for (int i = 0; i < input.length(); i++) {
char oldChar = input.charAt(i);
int oldCharPositionInDictionary = dictionary.indexOf(oldChar);
if (oldCharPositionInDictionary >= 0) {
int newCharPositionInDictionary =
(oldCharPositionInDictionary + lag) % dictionary.length();
sb.append(dictionary.charAt(newCharPositionInDictionary));
}
else if (oldChar == ' ') {
sb.append(' ');
}
}
String result = sb.toString();
String dictionary=“abcdefghijklmnopqrstuvwxyz”;
StringBuilder sb=新的StringBuilder(input.length());
对于(int i=0;i=0){
int newcharpositionindicationary=
(oldcharpositionindicationary+lag)%dictionary.length();
某人追加(字典字符(新字符);
}
else if(oldChar==''){
某人附加(“”);
}
}
字符串结果=sb.toString();
试试这个:
String code = "abcdefghijklmnopqrstuvwxyzabcd";
String s = "abcdef";
char[] ch = s.toCharArray();
char[] codes = code.toCharArray();
for (int i = 0; i < ch.length; ++i)
{
ch[i] = codes[ch[i] - 'a' + 3];
}
String str = new String(ch);
System.out.println(str);
}
String code=“abcdefghijklmnopqrstuvxyzabcd”;
字符串s=“abcdef”;
char[]ch=s.toCharArray();
char[]code=code.toCharArray();
对于(int i=0;i
String code = "abcdefghijklmnopqrstuvwxyzabcd";
String s = "abcdef";
char[] ch = s.toCharArray();
char[] codes = code.toCharArray();
for (int i = 0; i < ch.length; ++i)
{
ch[i] = codes[ch[i] - 'a' + 3];
}
String str = new String(ch);
System.out.println(str);
}
String code=“abcdefghijklmnopqrstuvxyzabcd”;
字符串s=“abcdef”;
char[]ch=s.toCharArray();
char[]code=code.toCharArray();
对于(int i=0;i
String alpha=“abcdefghijklmnopqrstuvxyzabcd”//字母表
int N=alpha.length();
int-lag=3;//移位值
字符串s=“cde”//输入
StringBuilder sb=新的StringBuilder();
对于(int i=0,索引;i
String alpha=“abcdefghijklmnopqrstuvxyzabcd”//字母表
int N=alpha.length();
int-lag=3;//移位值
字符串s=“cde”//输入
StringBuilder sb=新的StringBuilder();
对于(int i=0,索引;i
我的答案是这样的
它为每个字符返回一个以上的索引
它反转每个字符串
祝你有愉快的一天
package org.owls.sof;
import java.util.Scanner;
public class Main {
private static final String CODE = "abcdefghijklmnopqrstuvwxyz"; //my lag is 4 and I added the first 4 characters to
@SuppressWarnings("resource")
public static void main(String[] args) {
System.out.print("insert alphabet >> ");
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
char[] char_arr = s.toCharArray();
for(int i = 0; i < char_arr.length; i++){
int order = CODE.indexOf(char_arr[i]) + 1;
if(order%CODE.length() == 0){
char_arr[i] = CODE.charAt(0);
}else{
char_arr[i] = CODE.charAt(order);
}
}
System.out.println(new String(char_arr));
//reverse
System.out.println(reverse(new String(char_arr)));
}
private static String reverse (String str) {
char[] char_arr = str.toCharArray();
for(int i = 0; i < char_arr.length/2; i++){
char tmp = char_arr[i];
char_arr[i] = char_arr[char_arr.length - i - 1];
char_arr[char_arr.length - i - 1] = tmp;
}
return new String(char_arr);
}
}
package org.owls.sof;
导入java.util.Scanner;
公共班机{
私有的