繁体   English   中英

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

[英]find substring index in array using Java

我想使用Java从Character数组返回用户输入子字符串的索引。 对数组进行初始化,加扰,然后进行搜索。 我是新手,并尝试了两种不同的方法但没有成功。 我在俯瞰什么? 提前致谢。

方法1:

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

方法2:

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)

这将解决问题..

方法1:

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

方法2:

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

问题是你有一个字符数组aListletter是一个字符串,因此它搜索字符数组中的String 哪个可能导致ClassCastException或String未找到。

简而言之: Character AString A

方法1:

当运行文档并输入字母时,即使列表包含字母,也会返回-1。

好的,这个问题@Dileep已经回答了,

int retval = aList.IndexOf(letter);

错误是你已经将String类型传递给List.indexOf(Object o)aList包含Character类型的所有元素。 因此List.indexOf()将始终返回-1。

你可以换工作:

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

注意:我使用了Character.toUpperCase(),因为你有大写的所有元素。


方法2:

 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character 

异常消息已经回答, String不能被更改/强制转换为Character

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

这里,

  • anArray包含Character元素类型

  • 你已经在内部传递StringArrays.binarySearch()而不是charCharacter ,当Arrays#binarySearch() Character.compareTo(T o)在这里调用Character.compareTo(T o) ,指定对象的类型(即letter#String )阻止它成为与Character对象相比。 然后ClassCastException

解:

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

暂无
暂无

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

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