我有一个文本文件,其中包含以下格式的姓名和电话号码:
我是11111, 你-22222, we-33333, us-44444, 他们-55555,将上面的内容存储在数组列表中后,我想创建一个方法,首先要求用户输入名称,然后检查名称是否存在。如果是,则打印出相应的号码。
这就是我所拥有的:
public static void search () {
String wanted;
System.out.println("Give a neme: ");
wanted = scan.nextLine();
for (int i = 0; i < list.size() - 1 ; i++)
{
// here I'm trying to separate the names in the array-list
// if it matches "wanted" print it out
if (wanted.equals(list.get(i).substring(' ', ','))) {
System.out.println("names: " + list.get(i));
}
}
}
我收到错误,原因是什么
线程“main”中的异常java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:44
答案 0 :(得分:1)
您可以尝试这种方式:
import static org.codehaus.groovy.ast.ClassHelper.make
import static org.codehaus.groovy.ast.tools.GenericsUtils.makeClassSafeWithGenerics
...
ClassNode hashSet = makeClassSafeWithGenerics(HashSet, make(Long))
答案 1 :(得分:0)
当数据以有助于解决问题的方式表示时,大多数问题都会在代码中有一个非常简单的解决方案。在您的情况下,从名称到数字将数据表示为Map<String, String>
,检查存在和查找将是微不足道的:
@Test
public void test() {
String data = "me-012345, them-543210";
Map<String, String> name2number = new HashMap<>();
for (String entry: data.split(", ")) {
String[] pair = entry.split("-");
name2number.put(pair[0], pair[1]);
}
System.out.println(name2number.get("me"));
System.out.println(name2number.get("them"));
System.out.println(name2number.get("somebody else"));
}
此测试打印:
012345
543210
null
本质上,当您以上述格式读入或加载数据时,请立即解析它们,将其置于匹配的结构中(Map
或MultiMap
,如果同名的多个数字可能)并围绕此数据结构构建代码。
答案 2 :(得分:0)
有很多方法可以做到这一点。根据您的简单方法,我将其更正如下:
for (int i = 0; i < list.size()-1; i++) {
String temp = list.get(i);
if (wanted.equals(temp.substring(0, temp.indexOf('-')))) {
System.out.println("names: " + list.get(i));
}
}
答案 3 :(得分:0)
这是工作解决方案
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class FindString {
public static List<String> names = new ArrayList<String>();
public static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
names.add("me-22222");
names.add("us-33333");
names.add("you-44444");
names.add("they-55555");
System.out.println("Enter name: ");
String toCheck = scanner.next();
for(String s : names) {
String[] parts = s.split("-");
String name = parts[0];
int number = Integer.parseInt(parts[1]);
if(toCheck.equals(name))
System.out.println("This name already got a number : " + number);
else
System.out.println("There is no number connected with this name!");
}
}
}
答案 4 :(得分:0)
您尚未提供从File中读取内容的代码。确保你在那部分做得对。我已经写了一个完整的演示版供您参考。
将用户的姓名和电话号码读入Map
是一种易于理解的方式。无需自己编写循环来获取用户的电话号码,但让Map
将其发送给您。
请参阅以下代码。
import java.io.*;
import java.util.*;
public class Test3 {
public static void main(String args[]){
readFile();
search();
}
static Scanner scan = new Scanner(System.in);
static Map<String, String> map = new HashMap<String, String>();
public static void readFile(){
try{
BufferedReader br = new BufferedReader(new FileReader("file1"));
String line = br.readLine();
while(line != null){
String tokens[] = line.split(" ,");
for(String token: tokens){
String name = token.split("-")[0].trim();
String phoneNum = token.split("-")[1].trim();
map.put(name, phoneNum);
}
System.out.println(Arrays.toString(tokens));
System.out.println(map);
line = br.readLine();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void search() {
String wanted;
System.out.println("Give a neme: ");
wanted = scan.nextLine();
if(map.get(wanted) != null){
System.out.println("names: " + map.get(wanted));
}else{
System.out.println("Name is not existed");
}
}
}
答案 5 :(得分:0)
subString方法的起始索引和lastIndex在哪里。 看看这个工作正常。
public static void main(String[] args){
nameList = new ArrayList<>();
populateNameList();
Scanner scanner = new Scanner(System.in);
System.out.print("Name: ");
String name = scanner.nextLine();
search(name);
}
private static void populateNameList(){
nameList.add("me-11111");
nameList.add("you-22222");
nameList.add("we-33333");
nameList.add("us-44444");
}
private static void search(String name){
for (int i = 0; i < nameList.size(); i++) {
if(name.equalsIgnoreCase(nameList.get(i).substring(0,
nameList.get(i).indexOf("-")))){
System.out.println(nameList.get(i).substring(nameList.get(i).indexOf("-")+1));
break;
}
}
}