Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_Replace_Char - Fatal编程技术网

Java-基于旧字符串和延迟生成新字符串

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

我需要在旧字符串和延迟的基础上得到一个新字符串。基本上,我有一个字母表的字符串(s=“abc…xyz”),并且基于滞后(即3),新字符串应该将我键入的字符串中的字符替换为向前放置的字符(滞后)。比如说,如果我键入“cde”作为字符串,那么输出应该是“fgh”。如果在字符串中添加了任何其他字符(除了空格-“”),则应将其删除。以下是我尝试过的,但不起作用:

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();
试试这个:

  • 将字符串转换为字符数组
  • 迭代每个字符数组,并通过添加lag更改字符
  • 使用传递char数组的新字符串只创建一次新字符串(而不是循环)

    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
  • 试试这个:

  • 将字符串转换为字符数组
  • 迭代每个字符数组,并通过添加lag更改字符
  • 使用传递char数组的新字符串只创建一次新字符串(而不是循环)

    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;
    公共班机{
    私有的