我需要一些关于JAVA中的子字符串函数的指导

我需要一些关于JAVA中的子字符串函数的指导,java,Java,我不确定这段代码哪里出了问题。有人能给我一些指导吗 这是我的问题,也是我试图得到的结果 修改songVerse以玩名称游戏OxfordDictionaries.com,将名称替换为用户名,但不包含第一个字母 例如:如果userName=Katie,songVerse=Banana fana fo fName!,该程序打印: 法蒂香蕉粉! 例如:如果userName=Katie和songVerse=Fee-fi-mo-mName,程序将打印: 费费模型 注意:您可以假设songVerse将始终包含

我不确定这段代码哪里出了问题。有人能给我一些指导吗

这是我的问题,也是我试图得到的结果

修改songVerse以玩名称游戏OxfordDictionaries.com,将名称替换为用户名,但不包含第一个字母

例如:如果userName=Katie,songVerse=Banana fana fo fName!,该程序打印: 法蒂香蕉粉! 例如:如果userName=Katie和songVerse=Fee-fi-mo-mName,程序将打印: 费费模型 注意:您可以假设songVerse将始终包含子字符串名称

我上次试过的代码…无论我输入什么,我都会得到相同的结果。我尝试了userName.substring的不同方案,但仍然有相同的结果

import java.util.Scanner;

public class NameSong {
    public static void main (String [] args) {
        Scanner scnr = new Scanner(System.in);
        String userName;
        String songVerse;

        userName = scnr.nextLine();
        userName = userName.substring(1); // Remove first character

        songVerse = scnr.nextLine();

        // Modify songVerse to replace (Name) with userName without first character

        songVerse = songVerse + userName.substring(1 , userName.length()); // this is where my problem is.

        System.out.println(songVerse);
    }
}
1项测试通过

所有测试均通过


这里您已经从用户名中删除了第一个字符,所以在最后一行的第二行,您也不需要删除它。 对于这首歌的歌词,你需要删除它的名字,所以在这里你可以使用

songVerse = songVerse.replace("(NAME)","");
songVerse = songVerse+userName;

方法substringint begin,int end让我们从初始字符串中选择/创建一个子字符串,该字符串指示子字符串应该从中开始和结束或仅开始的字符数。没有其他变体可以编辑子字符串,但在您的情况下,它不会成为新制作的字符串“string songVerse”的一部分。object.replace方法应该将所指示的“Text”更改为您希望插入的任何内容,而不是单独在“Text”之前或之后插入字符的数量或类型。Nicholas K提出的变体是正确的,应该有效,或者您可以尝试其较短的版本,但结果将是相同的:

public class NameSong  {
    public static void main (String [] args) {
        Scanner scnr = new Scanner(System.in);
        String userName;
        String songVerse;

        userName = scnr.nextLine();
        songVerse = scnr.nextLine();
        songVerse = songVerse.replace("(Name)", userName.substring(1));

      System.out.println(songVerse);
   }

}

代码的问题在于您没有试图解决问题中描述的问题

尝试以下步骤:

设计一个用英语写的解决问题的步骤清单;注意细节。 手动运行步骤1中的步骤列表。 将步骤1中的步骤转换为代码。 以下是一些提示:

你将一次读一行歌词。 有些线路有替换件,有些线路没有。 您将收到一次作为输入的名称;生成名称替换值一次,并在每次执行替换时使用它。 你的代码很糟糕。 这里有更多关于注意细节的内容

代码中没有循环; 这将读取一行歌词并执行一次替换。 数一数歌词中的行数。 如果行数大于1, 那么你的技术肯定会失败

如果代码中有一个循环,但决定不将其包含在代码中, 不要在你的问题上撒谎。 我们无法帮助您修复假装不存在的代码

在一个理智的世界里, 用于替换的名称将只出现一次。 读一遍

要替换字符串中的名称,必须首先在字符串中查找名称

给你

  userName = scnr.nextLine();
  userName = userName.substring(1); // Remove first character

  songVerse = scnr.nextLine();

  // Modify songVerse to replace (Name) with userName without first character

    songVerse = songVerse.replace("(Name)", userName.substring(0));

  System.out.println(songVerse);
} }这很容易

import java.util.Scanner;

public class NameSong {
  public static void main (String [] args) {
  Scanner scnr = new Scanner(System.in);
  String userName;
  String songVerse;

  userName = scnr.nextLine();
  userName = userName.substring(1); // Remove first character

  songVerse = scnr.nextLine();

  // Modify songVerse to replace (Name) with userName without first character
   songVerse = songVerse.replace("(Name)", userName);
  /* Your solution goes here  */

  System.out.println(songVerse);
  }
}

您的代码所做的就是在songVerse的末尾添加用户名,减去您使用的前两个字符substring1两次。您需要找到名称的索引,然后使用子字符串插入用户名我理解…谢谢您的帮助。好的…谢谢大家的时间和指导。我确实理解了substring方法。
import java.util.Scanner;

public class NameSong {
  public static void main (String [] args) {
  Scanner scnr = new Scanner(System.in);
  String userName;
  String songVerse;

  userName = scnr.nextLine();
  userName = userName.substring(1); // Remove first character

  songVerse = scnr.nextLine();

  // Modify songVerse to replace (Name) with userName without first character
   songVerse = songVerse.replace("(Name)", userName);
  /* Your solution goes here  */

  System.out.println(songVerse);
  }
}