【发布时间】:2022-01-23 04:54:36
【问题描述】:
假设我有一个字符串(称为 s),格式如下:
[String] [String] [double] [int]
例如, “是的詹姆斯 3.5 2” 我想将这些数据读入单独的变量(一个字符串、一个字符串、一个双精度和一个整数)
请注意,我来自 C++ 背景。在 C++ 中,我会执行以下操作:
std::istringstream iss{s}; // create a stream to the string
std::string first, second;
double third = 0.0;
int fourth = 0;
iss >> first >> second >> third >> fourth; // read data
在Java中,我想出了以下代码:
String[] sa = s.split(" ");
String first = sa[0], second = sa[1];
double third = Double.parseDouble(sa[2]);
int fourth = Integer.parseInt(sa[3]);
但是,我将不得不对许多不同的输入执行此操作,因此我想使用最有效和最快的方式来执行此操作。
问题:
- 有没有更有效/更快的方法来做到这一点?也许是更清洁的方式?
【问题讨论】:
-
如果你正在阅读输入,你可以使用扫描仪,
next()、nextInt()等。 -
C(+) 太优雅了! :) ...但是java是如此类型安全! :-))^^ 通常在 java/大规模(在 c 中当然也更有效)我会推荐使用正则表达式!但是当你说“许多不同的输入”时......我想到了更结构化(csv/json/固定宽度,基于库)的解决方案
-
Scanner 可以将
String作为输入。