java - 使用Java在数组中查找子字符串索引

标签 java arrays

我想使用 Java 从字符数组返回用户输入子字符串的索引。该数组被初始化、加扰,然后被搜索。我对此很陌生,尝试了两种不同的方法但没有成功。我忽略了什么?提前致谢。

方法一:

import java.lang.Math;
import java.util.Scanner;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

public class ArrayRandomChar {
public static void main(String[] args) {
    // Create an array of characters:
    Character[] anArray = {'P', 'A', 'P', 'A', 'B', 'E', 'A', 'R'};
    for (char ch: anArray)
    System.out.print(ch + " ");
    System.out.println();

    // Create list from array and shuffle
    List<Character> aList = Arrays.asList(anArray);
    Collections.shuffle(aList);
    System.out.print(aList);
    System.out.println();

    // Bring back into array
    Object ob[] = aList.toArray();
    for (Object ch: anArray)
    System.out.print((Character) ch + " ");

    // User input
    Scanner input = new Scanner(System.in);
    String letter = input.next();
    System.out.println(letter);

    // Return index of letter, -1 if doesn't contain
    int retval = aList.IndexOf(letter);
    System.out.println(retval);

    }
      }

问题:当运行文档并输入一个字母时,即使列表中包含该字母,也会返回-1

方法二:

public class ArrayRandomChar {
public static void main(String[] args) {

    // Create an array of characters:
    Character[] anArray = {'P', 'A', 'P', 'A', 'B', 'E', 'A', 'R'};
    for (char ch: anArray)
        System.out.print(ch + " ");
    System.out.println();

    // Create list from array:
    List<Character> aList = Arrays.asList(anArray);
    Collections.shuffle(aList);
    System.out.print(aList);
    System.out.println();

    //create array from list
    Object ob[] = aList.toArray();
    for (Object ch: anArray)
        System.out.print((Character) ch + " ");

    //user input
    Scanner input = new Scanner(System.in);
    String letter = input.next();
    int index = Arrays.binarySearch(anArray, letter);
    System.out.println(~index);
    System.out.println(letter);

    }
      }

这会抛出异常:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character
at java.lang.Character.compareTo(Character.java:101)
at java.util.Arrays.binarySearch0(Arrays.java:2001)
at java.util.Arrays.binarySearch(Arrays.java:1943)
at ArrayRandomChar.main(ArrayRandomChar.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

最佳答案

这将解决问题..

方法一:

int retval = aList.indexOf(letter.charAt(0));

方法 2:

int index = Arrays.binarySearch(anArray, letter.charAt(0));

问题是你有一个字符数组 aList,而 letter 是一个字符串,因此它在中搜索一个 String字符数组。这可能会导致 ClassCastException 或 String not found。

In short : Character A is not same as String A

关于java - 使用Java在数组中查找子字符串索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753794/

相关文章:

java - 获取多维数组的大小

c - 当您将学生人数的值输入为 3 时,这个 while 循环如何打印 3 作为 cnt 的值而不是 2?

Java Lambda |在字符串中查找字符串数组第一次出现的位置

c# - 需要帮助在 c# 中将数据写入 json

Python - 从函数返回多个值到不同的数组

Java ImageIO 将图像 byte[] 读取到预分配的 BufferedImage 中

c++ - 结构中二维数组的动态内存分配

java - 初始化变量seam的正确方法

java - 哪种类型的花括号编码风格更适合 Java 程序员?

java - 如何均匀分布 JavaFX VBox 的元素