我需要有关JAVA中子字符串功能的一些指导

时间:2018-10-07 18:17:56

标签: java

我不确定此特定代码在哪里出错。有人可以帮我一些指导吗?

这是我的问题,以及我试图取得的结果。

通过用用户名(但不带首字母)替换“(名称)”,修改songVerse以播放“名称游戏”(OxfordDictionaries.com)。

例如:如果userName =“ Katie”和songVerse =“ Banana-fana fo-f(名称)!”,程序将打印: 香蕉-fana fo-fatie! 例如:如果userName =“ Katie”和songVerse =“ Fee fi mo-m(Name)”,程序将输出: 收费电影 注意:您可以假定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个测试通过

     

所有测试通过

Run
Testing Katie and Banana-fana fo-f(Name)!
Output differs. See highlights below.
Your output
Banana-fana fo-f(Name)!tie
Expected output
Banana-fana fo-fatie!
Testing Walter and Banana-fana fo-f(Name)!
Output differs. See highlights below.
Your output
Banana-fana fo-f(Name)!lter
Expected output
Banana-fana fo-falter!
Testing Katie and Fee fi mo-m(Name)
Output differs. See highlights below.
Your output
Fee fi mo-m(Name)tie
Expected output
Fee fi mo-matie

5 个答案:

答案 0 :(得分:0)

在这里,您已经从userName中删除了第一个字符,因此在第二行中,您无需再次删除它。 对于歌曲Verse,您需要从其中删除“(NAME)”,因此您可以在这里使用

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

答案 1 :(得分:0)

方法substring(int begin,int end)允许从初始String处创建/创建一个子字符串,该字符串指示应从该字符开始和结束或仅开始的字符数。没有其他变体来编辑子字符串,尽管它不会成为新创建的字符串的一部分(在您的情况下为“ String songVerse”)。 object.replace()方法应将指示的“文本”(在您的情况下为“(名称)”)更改为您想要插入的任何内容,而不是依赖于字符的数量或类型,而不是之前或之后在“文字”之后。 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);
   }

}

答案 2 :(得分:0)

您的代码存在的问题是您没有尝试解决问题中描述的问题。

尝试执行以下步骤:

  1. 设计英文解决问题的步骤列表;注意细节。
  2. 手动运行步骤1中的步骤列表。
  3. 将步骤1中的步骤转换为代码。

以下是一些提示:

  • 您一次只能读一行歌词。
  • 某些行有替换项,而另一些则没有。
  • 您将一次收到“名称”作为输入;一次生成名称替换值,并在每次执行替换时使用它。

您的代码很糟糕。 这是有关“注意细节”的更多信息

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

  • 如果您的代码中有一个循环,但决定不将其包含在代码中, 不要再说谎了。 我们不能帮助您修复您假装不存在的代码。

  • 在一个理智的世界中, 用于替换的名称将恰好出现一次。 读一遍。

  • 要替换字符串中的(名称),必须首先找到字符串中的(名称)。

答案 3 :(得分:0)

你在这里。

  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);

} }

答案 4 :(得分:0)

这很简单

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);
  }
}