繁体   English   中英

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

[英]I need some guidance on the substring function in JAVA

我不确定这个特定代码哪里出了问题。 有人可以给我一些指导吗?

这是我的问题以及我试图作为结果的结果。

修改 songVerse 以播放“The Name Game”(OxfordDictionaries.com),将“(Name)”替换为 userName 但没有首字母。

例如:如果 userName = "Katie" 和 songVerse = "Banana-fana fo-f(Name)!",程序打印:Banana-fana fo-fatie! 例如:如果 userName = "Katie" 和 songVerse = "Fee fi mo-m(Name)",程序将打印: Fee fi mo-matie 注意:您可能认为 songVerse 将始终包含子字符串“(Name)”。

我上次尝试过的代码......无论我输入什么,我都会得到相同的结果。 我尝试了“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

干得好。

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

} }

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

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

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

}

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

尝试执行以下步骤:

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

这里有一些提示:

  • 您将一次阅读一行歌词。
  • 有些线路有替代品,有些则没有。
  • 您将收到 Name 作为输入一次; 生成名称替换值一次并在每次执行替换时使用它。

你的代码很糟糕。 这里有更多关于“注意细节”的内容

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

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

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

  • 为了替换字符串中的 (Name),您必须首先在字符串中找到 (Name)。

这很容易

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM