Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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 限制使用正则表达式解析的文本量?_Java_Regex - Fatal编程技术网

Java 限制使用正则表达式解析的文本量?

Java 限制使用正则表达式解析的文本量?,java,regex,Java,Regex,为了在程序中设置标签,我试图限制从输入文本中分割的文本数量。我的问题是我的正则表达式会从我不想要的地方抓取字母 文本取自我的程序中的文本区域,然后在setTuningLabel方法中使用 public void convertButtonClick(ActionEvent e) { setTuningLabel(tabArea.getText()); } 此方法的典型输入如下所示: [Verse] e |---------------------------

为了在程序中设置标签,我试图限制从输入文本中分割的文本数量。我的问题是我的正则表达式会从我不想要的地方抓取字母

文本取自我的程序中的文本区域,然后在setTuningLabel方法中使用

    public void convertButtonClick(ActionEvent e) {
        setTuningLabel(tabArea.getText());
    }
此方法的典型输入如下所示:

 
[Verse]
e |-------------------------------------------|
C#|-------------------------------------------|
A |-------------------------------------------|
E |-------------------------------------------|
A |---7----7----10----7----5----3----2--------| (x8)
E |-------------------------------------------|
  // I want it to cut off here
[Pre-chorus]
e |---------------------------------------------|
C#|------------------------0-0-0-0--0-0-0-0-----|
A |------------------------0-0-0-0--0-0-0-0-----|
E |-0-0--------------------0-0-0-0--0-0-0-0-----|
A |-0-0--5-5-5-5--5-5-5-5--0-0-0-0--0-0-0-0-----|
E |-0-0--3-3-3-3--3-3-3-3--0-0-0-0--0-0-0-0-----|
从这个输入中,我想抓取每行开头的字母,直到它成为新行,然后我希望它停止。所以它应该抓取e,C#,A,e,A,e。这里的行数可以变化,但并不总是6

对于当前的正则表达式,它不会忽略括号内的字母,我希望它这样做,我还希望它在输入的第一个中断处停止。这通常是一条新的生产线

按照当前的工作方式,标签将当前设置为 E、 E,E,C#,A,E,A,E,E,C,E,C#,A,E,A,E,A,E。在这里,它从方括号内抓取字母,持续的时间比我希望的要长

我希望输出的样子是
E、 C#,A,E,A,E.

简单地说,您需要获取字符串的前一个或两个字符。我假设您知道如何逐行遍历文件(如果不是这样,请告诉我),因此我们假设您已经从文件中读取了一行,并将其放入名为
line
的字符串变量中

String note = line.substring(0,2).trim();
substring方法从
获取索引0和1处的字符。注释后面不能有尖锐或扁平的符号。在这种情况下,抓取两个字符会在便笺后面留下不需要的空格,因此使用
trim()
方法删除该空格

然后可以连接这些注释。请原谅p代码和实际代码的混合——我很懒

while(my file has lines)
{
    String notes = "";
    String note = line.substring(0,2).trim();
    notes = notes + ", " + note;
}
如何逐行阅读文本区域的上下文(从技术上讲,这是一个单独的问题,应该以这样的方式发布,但以一便士换一英镑……)

String myText=tabArea.getText();
字符串注释=”;
弦乐=”;
字符串[]行=myText.split(“-|”);
用于(int计数器=0;计数器
最好指定准确的输入和预期的输出。您应该在当前问题内容的末尾添加这两项内容。@ArvindKumarAvinash由于程序的性质,没有直接的准确输入。如果你的意思是我描述的问题,提到的输入是用来获得输出的。你可能想改进一下你的问题。在我看来,您所需要的只是抓住表左侧的行标识符,而忽略其他所有内容。如果这是正确的,有很多更简单的方法来做你想做的事情,但我怀疑还有更多。@MarsAtomic这就是我想做的,这是我考虑解决问题的唯一方法,显然不是最好的方法。那一行的长度可能很长。在这种情况下,它是6,但在其他情况下,它可能是4,8等等。但我只想抓住第一组,如果这有意义的话?你有没有试着把^放在[?然后它只匹配一行开头的字符串。这似乎是正确的方法,但我应该声明(我的错,我是stackOverflow新手)输入被粘贴到一个文本区域,然后加载到这个方法中。它不是从文件中加载的。我会把代码添加到主帖子中
while(my file has lines)
{
    String notes = "";
    String note = line.substring(0,2).trim();
    notes = notes + ", " + note;
}
String myText = tabArea.getText();
String note = "";
String notes = "";
String[] lines = myText.split("-|");
for(int counter = 0; counter < lines.length - 1; counter++)
{
    note = line.substring(0,2).trim();
    notes = notes + ", " + note;
}

notes = notes + note; // this appends the final note without the comma and space