我想为扫描器指定一个分隔符,该分隔符可以按某种模式进行拆分,但不会从令牌中删除该模式。我似乎无法完成这项工作,因为正则表达式所标识的所有内容也会作为分隔符的一部分被占用。有什么建议?
我的具体问题是,我的文件看起来像:
text/numbers mix
numbers
numbers
text/numbers mix
numbers
numbers
numbers
.
.
我想从文本/数字混合+行中分离出来,直到下一个文本/数字混合。我有正则表达式来标识它们,但是如上所述,因为定界符占用了我想要的内容,所以使用了它。
编辑:代码添加:
static final String labelRegex="\\s*[^01\\s*]\\w+\\s*";
static final Pattern labelPattern = Pattern.compile(labelRegex, Pattern.MULTILINE);
是我用来识别文本/数字位的模式(我知道我的数字行包含所有1/0,以空格分隔)。
当我初始化扫描仪时:
stateScan = new Scanner(new BufferedReader(new FileReader(source)));
stateScan.useDelimiter(labelPattern);
吃掉标签,然后离开行。我目前有一个可行的实现,可以在来自同一源的两个缓冲文件阅读器上启动两个扫描器,一个按状态拆分,另一个按标签拆分。我真的希望它只是一个吸引人的标签+州。
您可以在正则表达式中使用正面的外观。比赛中不包括前瞻性和后瞻性,因此扫描程序不会“吃掉”它们。这个正则表达式可能会做你想要的:
(?=text/numbers)
分隔符将是子字符串之前的空字符串text/numbers
。
这是一个小演示:
public class Main {
public static void main(String[] args) {
String text = "text/numbers mix\n"+
"numbers\n"+
"numbers\n"+
"text/numbers mix\n"+
"numbers\n"+
"numbers\n"+
"numbers";
String regex = "(?=text/numbers)";
Scanner scan = new Scanner(text).useDelimiter(regex);
while(scan.hasNext()) {
System.out.println("------------------------");
System.out.println(">"+scan.next().trim()+"<");
}
}
}
产生:
------------------------
>text/numbers mix
numbers
numbers<
------------------------
>text/numbers mix
numbers
numbers
numbers<
我目前正在执行游戏风险。在我的Board课程中,我阅读了三个不同的文本文件,其中包括国家、大陆及其邻近地区。当我构建一个新大陆时,它的构造器需要以下内容(字符串名、int-bonusArmies、ArrayList-memberCountries)。现在,我用扫描器从一个文本文件中读取,这个文件是这样组织的,它的名字,它拥有的奖金军队,每行的其余部分是它的成员国。 北美、5、阿拉斯加、阿尔伯塔省、
我正试图用Java中的扫描器将一个字符串分成另外两个字符串。好像不起作用。我只能通过谷歌找到扫描仪用来读取控制台输入的例子。我从扫描仪的手册中找出了我做事情的方式,我不确定我错了什么。 第一个和第二个是空白的,我不知道为什么。
我正在尝试编写一个应用程序,它将占用一个非常大的sql文本文件~60GB(2.57亿行),并将每个COPY语句拆分为单独的文本文件。 但是,我目前使用的代码会导致OutOfMemoryError,因为行超过了扫描仪缓冲区限制。第一个语句将是4000万行。 请提供建议,说明这是执行此操作的错误方法还是对现有方法的修改。 谢啦
根据JavaAPI Scanner使用分隔符将整个输入分解为标记。我正在尝试理解标记和分隔符。我正在做这个程序,遇到了一个混乱 当我使用输入时,我得到以下输出。 我可以理解这个输出,因为分隔符之间的标记长度为零,因此所有标记都为零,但当我使用默认分隔符并将输入作为 <代码>\uuuuuuuaaa\n- 为此,我得到的输出为 我无法理解。我给了5个空格,所以它们之间应该有4个长度为0的标记。为什么不
我正在创建一个小算法,这是其中的一部分。 如果用户输入非整数值,我想输出一条消息,让用户再次输入一个数字: 我得到了一个永无止境的循环,我不知道为什么。 如果用户输入非整数数字,我如何识别? 如果用户输入非整数数字,我如何要求用户再次输入? 更新 当我打印异常时,我得到了InputMismatchExctive,我应该怎么做?
问题内容: 如何将扫描仪的定界符设置为;或换行? 我试过: 但这不起作用。 问题答案: 通常,在模式中,您需要将翻倍。 所以,尝试 要么 编辑 :如果是问题,则可能要尝试以下操作: 它匹配的一个或多个,和。 注意 :我还没有尝试过这些。