Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从URL OpenStream扫描中删除额外信息?_Java_Arraylist_Binary - Fatal编程技术网

Java 如何从URL OpenStream扫描中删除额外信息?

Java 如何从URL OpenStream扫描中删除额外信息?,java,arraylist,binary,Java,Arraylist,Binary,我创建了一个程序,从美国人口普查日期()获取姓氏,并使用二进制搜索查找用户的姓氏。明确地说,我对这部分代码没有任何问题。我遇到的麻烦是试图删除额外的信息。当我运行代码时,它返回整行。例如: ROBINSON 0.233 8.372 20 当我想要的只是: ROBINSON 我如何着手解决这个问题?我的代码如下: import java.util.ArrayList; import java.net.*; import java.io.*; import java.uti

我创建了一个程序,从美国人口普查日期()获取姓氏,并使用二进制搜索查找用户的姓氏。明确地说,我对这部分代码没有任何问题。我遇到的麻烦是试图删除额外的信息。当我运行代码时,它返回整行。例如:

ROBINSON       0.233  8.372     20
当我想要的只是:

ROBINSON
我如何着手解决这个问题?我的代码如下:

import java.util.ArrayList;
import java.net.*;
import java.io.*;
import java.util.Scanner;
import java.util.Collections;
public class NameGuesser
{
public static void main(String[] args) throws IOException, MalformedURLException
{
    ArrayList<String> lastNames = new ArrayList<String>();
    URL url = new URL("http://www.census.gov/genealogy/www/data/1990surnames/dist.all.last");        
    Scanner in = new Scanner(url.openStream());
    while (in.hasNextLine())
    {
        lastNames.add(in.nextLine());
    }
    Collections.sort(lastNames);
    int low = 0;
    int high = lastNames.size();
    int loop = 0;
    int mid = 7;
    while(loop==0)
    {
        String t1 = lastNames.get(mid);
        mid = (low+high)/2;
        System.out.println("This program tries to guess your last name, but you have to give some hints.");
        System.out.println("Does your name come before " + lastNames.get(mid) + " in the dictionary? (Y/N)");
        Scanner input = new Scanner(System.in);
        String answer = input.nextLine();
        String t2 = lastNames.get(mid);
        if(t1.equals(t2))
        {
            System.out.println("Your name is " + t2);
            System.exit(0);
        }
        if(answer.equalsIgnoreCase("Y"))
        {
            high = mid;
        }
        if(answer.equalsIgnoreCase("N"))
        {
            low = mid;
        }

    }
}
import java.util.ArrayList;
导入java.net。*;
导入java.io.*;
导入java.util.Scanner;
导入java.util.Collections;
公共类名称猜测器
{
公共静态void main(字符串[]args)引发IOException,MalformedUrlexException
{
ArrayList lastNames=新的ArrayList();
URL=新URL(“http://www.census.gov/genealogy/www/data/1990surnames/dist.all.last");        
Scanner in=new Scanner(url.openStream());
while(在.hasNextLine()中)
{
add(in.nextLine());
}
Collections.sort(lastNames);
int低=0;
int high=lastNames.size();
int循环=0;
int-mid=7;
while(循环==0)
{
字符串t1=lastNames.get(mid);
中等=(低+高)/2;
println(“这个程序试图猜测你的姓,但你必须给出一些提示。”);
System.out.println(“你的名字在字典中是否在“+lastNames.get(mid)+”之前?(Y/N)”;
扫描仪输入=新扫描仪(System.in);
字符串answer=input.nextLine();
字符串t2=lastNames.get(mid);
如果(t1等于(t2))
{
System.out.println(“您的名字是”+t2);
系统出口(0);
}
如果(回答。相等信号情况(“Y”))
{
高=中;
}
如果(回答:等信号情况(“N”))
{
低=中;
}
}
}
}

此处的这一位:

while (in.hasNextLine())
{
    lastNames.add(in.nextLine());
}
您正在中读取整行内容并将其添加到lastNames中。数据是以制表符分隔的,因此要除去额外的字段,您应该在将其放入lastNames之前执行此操作:

while (in.hasNextLine())
{
    String lastNameLine = in.nextLine();
    String [] parts = lastNameLine.split("\\t");  // Split by tabs.
    if(parts == null || parts.length < 0) { /* uh-oh... error condition */ }
    String lastName = parts[0];
    lastNames.add(lastName);
}
while(在.hasNextLine()中)
{
字符串lastNameLine=in.nextLine();
String[]parts=lastNameLine.split(\\t”);//按制表符拆分。
如果(parts==null | | parts.length<0){/*uh-oh…错误条件*/}
字符串lastName=parts[0];
添加(lastName);
}

我在我的程序中复制了你的全部代码,结果仍然是“ROBINSON 0.233 8.372 20”。我刚刚编辑过——你需要在split的正则表达式中的\\t上加一个双反斜杠。另外,添加代码来打印各个片段,你是指各个字母吗?不是,我指的是我提供的代码中的parts[]数组。