Java Method split()不使用逗号,数组超出范围
我试图将用户输入的地址字符串用逗号分隔。例如,如果用户输入地址Java Method split()不使用逗号,数组超出范围,java,arrays,indexing,split,Java,Arrays,Indexing,Split,我试图将用户输入的地址字符串用逗号分隔。例如,如果用户输入地址 “不列颠哥伦比亚省温哥华第56大道4367号,V4K1C3” 我想要一个带值的数组 阵列[“4376”、“56大道”、“温哥华”、“不列颠哥伦比亚省”、“V4K1C3”] 指数从0到4。但是,在我的一个类中实现此功能时,当我将Array[1]的值赋给一个变量时,我会不断得到一个数组越界错误,就好像所有内容都进入数组的0索引一样。下面是我写的一个片段,说明了这个问题: import java.util.Scanner; public
“不列颠哥伦比亚省温哥华第56大道4367号,V4K1C3”
我想要一个带值的数组
阵列[“4376”、“56大道”、“温哥华”、“不列颠哥伦比亚省”、“V4K1C3”]
指数从0到4。但是,在我的一个类中实现此功能时,当我将Array[1]
的值赋给一个变量时,我会不断得到一个数组越界错误,就好像所有内容都进入数组的0索引一样。下面是我写的一个片段,说明了这个问题:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String fullAddress = input.next();
String[] arr = fullAddress.split(",");
System.out.println(arr[0]);
System.out.println(arr[1]); //error java.lang.ArrayIndexOutOfBoundsException: 1
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
这里出了什么问题?问题是您使用的是
next()
,它使用
作为分隔符。给定输入为:
4367,不列颠哥伦比亚省温哥华第56大道,V4K1C3
使用next()
,您将得到fullAddress=“4367,
。拆分时,您会得到arr=[“4367”]
,因此在arr[1]
处会出现异常
改用nextLine()
String fullAddress = input.nextLine();
String fullAddress = input.nextLine();
使用nextLine()
而不是next()
next()
只返回空格前面的内容
nextLine()
返回数据后自动向下移动扫描仪
当前行
供您输入4367,不列颠哥伦比亚省温哥华第56大道,V4K1C3
您的
fullAddress
包含4367,
因此在split()
之后,您只有1项,并且您正试图访问第2个元素,因此您将获得java.lang.arrayindexoutofbounds异常:1
问题在于next()
因为它只读取输入,而不是行尾或输入后的任何内容。
你需要把它改成
您需要使用
nextLine()
而不是next()
。还应使用以下正则表达式来避免空格:
String[] arr = fullAddress.split(",\\s+");
如果使用带逗号的拆分,请不要忘记在每个令牌上使用
trim()
,因为如果您有这样的标记:“4367,56大街,温哥华,不列颠哥伦比亚省,V4K1C3”
阵列将如下所示:
array ["4376", " 56th Avenue", " Vancouver", " BC", " V4K1C3"]
如果没有
trim()
调试器告诉您FullAddress包含什么内容,则会有前导空格。^This。调试器可以在几秒钟内解决此问题;)最好使用适当的正则表达式直接拆分,以避免以后需要修剪()。看看我的答案。
String[] arr = fullAddress.split(",\\s+");
array ["4376", " 56th Avenue", " Vancouver", " BC", " V4K1C3"]