繁体   English   中英

Java:如何从数组中替换字符串元素

[英]Java: How do I replace a string element from an array

我是Java编程的新手,我正在尝试创建一个程序,其中将要求用户根据用户指定的数字将单词输入数组。 之后,程序将按字母顺序显示输入的单词。 还将提示用户“从列表中替换哪个单词?” 这是我遇到问题的部分。 我不知道用户如何输入新单词(字符串元素)并从列表中替换它。 我能想到的是输入一个整数,表示该单词在数组中的位置,并从列表中替换它。 不知道如何将其制成字符串?

import java.util.Scanner;
import java.util.Arrays;

public class EnterArrays {

    public static void main ( String args[] ){

        int length;
        Scanner sc = new Scanner(System.in);
        Scanner an = new Scanner(System.in);

        System.out.print("How many words are you going to enter? ");
        length = sc.nextInt();

        String[] sEnterWord = new String[length];

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.print("Enter word " + (nCtr+1) + ":");
            sEnterWord[nCtr] = sc.next();
        }

        System.out.println("Your words are: ");
        Arrays.sort(sEnterWord);

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.println(sEnterWord[nCtr]);
        }

        System.out.println("Which word would you like to change?");
        int sWordToChange = sc.nextInt();

        System.out.println("You have chosen to change the word : " + sWordToChange);

        System.out.println("Enter the new word: ");
        String sNewWord = an.nextLine();
        sEnterWord[sWordToChange-1] = sNewWord;

        System.out.println("Your words are: ");

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.println(sEnterWord[nCtr]);
        }

    }
}

将您的代码分解为较小的方法。 请参阅下面的(工作)示例。 您需要做的所有更改单词(字符串,而不是数字索引)的方法是循环遍历并使用equals方法检查是否相等。 之后的break语句将停止迭代(找到正确的索引后,再也没有任何意义了)。

import java.util.Scanner;
import java.util.Arrays;

public class Test {

    public static void main ( String args[] ){
        String[] sEnterWord = getSortedWordArr();
        showWordlist(sEnterWord);
        String sWordToChange = getInputFromKeyboard("Which word would you like to change? ");
        System.out.println("You have chosen to change the word : " + sWordToChange);
        changeWordInArray(sWordToChange, sEnterWord);
        Arrays.sort(sEnterWord);
        showWordlist(sEnterWord);
    }

    private static String[] getSortedWordArr(){
        String line = getInputFromKeyboard("How many words are you going to enter? ");
        int length = Integer.valueOf(line);

        String[] sEnterWord = new String[length];

        for(int nCtr = 0; nCtr < length; nCtr++){
            sEnterWord[nCtr] = getInputFromKeyboard("Enter word " + (nCtr+1) + ":");
        }

        Arrays.sort(sEnterWord);

        return sEnterWord;
    }

    private static String getInputFromKeyboard(String prompt){
        System.out.print(prompt);
        Scanner s = new Scanner(System.in);
        String input = s.nextLine();

        return input;
    }

    private static void showWordlist(String[] words){
        System.out.println("Your words are: ");
        for (String w : words){
            System.out.println(w);
        }
    }

    private static void changeWordInArray(String word, String[] array){
        String newWord = getInputFromKeyboard("Enter the new word: ");

        for (int i = 0; i < array.length; i++){
            if (array[i].equals(word)){
                array[i] = newWord;
                break;
            }
        }

        Arrays.sort(array);
    }
}

样本输出:

您要输入多少个单词? 5
输入单词1:苹果
输入单词2:香蕉
输入单词3:橙色
输入单词4:梨
输入单词5:柠檬
你的话是:
苹果
香蕉
柠檬
橙子

您想更改哪个词? 香蕉
您选择了更改这个词:香蕉
输入新词:草莓
你的话是:
苹果
柠檬
橙子

草莓

替换之间的代码

System.out.println(“您想更改哪个单词?”);

System.out.println(“您已选择更改单词:” + sWordToChange);

有了这个:

sc.nextLine();
String sWordToChange = sc.nextLine();
    int index=-1;
    for (int i = 0; i < sEnterWord.length; i++) {
       if(sEnterWord[i].equals(sWordToChange))
           index=i;
    }

说明:第一行只是为了避免扫描程序跳过对sWordToChange的分配。 for循环遍历数组并查找匹配项,如果找到匹配项,则将单词的索引保存在先前声明的变量索引上。 如果找不到该单词,则将其初始化为-1。 也许您想在替换之后立即添加一个if块,以确保仅在匹配时才修改数组

在此程序中,需要添加sc.nextLine()才能在String数组中使用新单词进行更新。Scanner类的nextLine()方法从缓冲区中获取空字符串。

整个程序随着代码的改变。

package expertwebindia;
import java.util.Arrays;
import java.util.Scanner;
public class Test {
    public static void main(String args[]){
        int length;
        Scanner sc = new Scanner(System.in);
        //Scanner an = new Scanner(System.in);

        System.out.print("How many words are you going to enter? ");
        length = sc.nextInt();

        String[] sEnterWord = new String[length];

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.print("Enter word " + (nCtr+1) + ":");
            sEnterWord[nCtr] = sc.next();
        }

        System.out.println("Your words are: ");
        Arrays.sort(sEnterWord);

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.println(sEnterWord[nCtr]);
        }

        System.out.println("Which word would you like to change?");
        int sWordToChange = sc.nextInt();
        sc.nextLine();
        System.out.println("You have chosen to change the word : " + sWordToChange);

        System.out.println("Enter the new word: ");
        String sNewWord = sc.nextLine();
        sEnterWord[sWordToChange-1] = sNewWord;

        System.out.println("Your words are: ");

        for(int nCtr = 0; nCtr < length; nCtr++){
            System.out.println(sEnterWord[nCtr]);
        }
    }
}

Scanner类更改为BufferedReader类。

public class ArrayTest {

public static void main(String args[]) throws IOException {

    int length;
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

    System.out.print("How many words are you going to enter? ");
    length=Integer.parseInt(br.readLine());

    String[] sEnterWord = new String[length];

    for (int nCtr = 0; nCtr < length; nCtr++) {
        System.out.println("Enter word " + (nCtr + 1) + ":");
        sEnterWord[nCtr]=br.readLine();
    }

    System.out.println("Your words are: ");
    Arrays.sort(sEnterWord);

    for (int nCtr = 0; nCtr < length; nCtr++) {
        System.out.println(sEnterWord[nCtr]);
    }

    System.out.println("Which word would you like to change?");

    String sWordToChange = br.readLine();


    System.out.print("Enter the new word: ");
    String sNewWord = br.readLine();

    for (int i = 0; i < sEnterWord.length; i++) {
        if (sEnterWord[i].equals(sWordToChange)) {
            sEnterWord[i] = sNewWord;

        }
    }

    System.out.println("Your words are: ");

    for (int nCtr = 0; nCtr < length; nCtr++) {
        System.out.println(sEnterWord[nCtr]);
    }

}}

您还可以在代码中进行一些更改,例如:

System.out.println("Which word would you like to change?");

    String sWordToChange = br.readLine();

    int position = Arrays.binarySearch(sEnterWord, sWordToChange);
    if (position < 0) {
        System.out.println("Word not found ");

    } else {
        System.out.print("Enter the new word: ");
        String sNewWord = br.readLine();
        sEnterWord[position] = sNewWord;
    }

暂无
暂无

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

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