Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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中如何读取后跟int的字符串?_Java_Java.util.scanner_Inputstream - Fatal编程技术网

在Java中如何读取后跟int的字符串?

在Java中如何读取后跟int的字符串?,java,java.util.scanner,inputstream,Java,Java.util.scanner,Inputstream,我一直在努力完成这件事。我需要的是读取如下输入:DEPOSITO 123 1000.00,但是字符串“DEPOSITO”需要保存在一个变量中,int“123”保存在另一个变量中,双精度“1000.00”保存在另一个变量中。问题是我找不到任何类似于scanner.nextString()的东西,如果我可以将字符串扫描到变量中,我可能可以使用scanner.nextInt()和scanner.nextDuble()扫描输入流的其余部分。如果我在尝试只读取字符串时执行scanner.next(),它会

我一直在努力完成这件事。我需要的是读取如下输入:
DEPOSITO 123 1000.00
,但是字符串“DEPOSITO”需要保存在一个变量中,int“123”保存在另一个变量中,双精度“1000.00”保存在另一个变量中。问题是我找不到任何类似于scanner.nextString()的东西,如果我可以将字符串扫描到变量中,我可能可以使用scanner.nextInt()和scanner.nextDuble()扫描输入流的其余部分。如果我在尝试只读取字符串时执行scanner.next(),它会读取整行,那么我的问题的答案是什么?我真的不懂。

因为输入总是以字符串开头,你可以先得到字符串,然后根据它确定后面有多少变量:

String input = scanner.nextLine();

// use regex to split string
String tokens = input.split("\\s+");

String firstPart = tokens[0];

int intPart = 0;
double doublePart = 0;
int transferenciaInt = 0;

if(firstPart.equals("SAQUE") || firstPart.equals("DEPOSITO"))
{
    intPart = Integer.parseInt(tokens[1]);
    doublePart = Double.parseDouble(tokens[2]);
}
else
{
    intPart = Integer.parseInt(tokens[1]);
    transferenciaInt = Integer.parseInt(tokens[2]);
    doublePart = Double.parseDouble(tokens[3]);
}

有关正则表达式(regex)的更多信息,请参见:

您可以像这样解析值

   Scanner scanner = new Scanner(System.in);
    String array[] = scanner.nextLine().split("\\s");
    String strValue = array[0];
    int intValue = Integer.valueOf(array[array.length - 2]);
    int intValue1 = 0;
    double doubleValue = Double.valueOf(array[array.length - 1]);
    if ("TRANSFERENCIA".equalsIgnoreCase(strValue)) {
        intValue1 = Integer.valueOf(array[array.length - 3]);
    }
然后您将有3个字符串:

  • s[0]
    将返回“存款”
  • s[1]
    返回“123”
  • s[2]
    它将返回“1000.00”
  • 现在:

    Integer i = Integer.parseInt(s[1]);
    Double d = Double.parseDouble(s[2]);
    

    请注意按空格将字符串分成3个部分。您可以发布您遇到问题的代码部分吗?这将使我们更容易提供帮助you@user3814613已经回答了,但是谢谢。输入并不总是由3个部分组成,有时有4个部分。是什么决定了输入开头的字符串,如果它是“SAQUE”或“DEPOSITO”,那么它将有两个以上的部分(int和double)。但是,如果字符串是“Transferncia”,那么它有3个以上的部分(int、int和double),我可以看到它背后的逻辑,问题是。。我正在一步一步地调试我的程序,它将整行作为字符串输入读取,但当我执行
    String[]tokens=input.split(\\s+”)
    时,它不会分割字符串,我可以访问变量窗格,而
    tokens[0]
    是整个输入。
    Integer i = Integer.parseInt(s[1]);
    Double d = Double.parseDouble(s[2]);