Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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_Inputstream_Bufferedreader_Bufferedwriter_Inputstreamreader - Fatal编程技术网

Java 如何删除选项卡第一个实例之后的所有字符?

Java 如何删除选项卡第一个实例之后的所有字符?,java,inputstream,bufferedreader,bufferedwriter,inputstreamreader,Java,Inputstream,Bufferedreader,Bufferedwriter,Inputstreamreader,我有一个很大的文本文件,大约有200000行文字翻译。我想保留显示在选项卡后面的翻译文本 abaxial van osovine abbacy opatstvo abbaino kora abbatial opatski abbe opat abbé opat abbé sveæenik hematological parameters hematološki pokazatelji 如何在选项卡的第一个实例之前去除所有字符?这样您就可以使用正则表达式

我有一个很大的文本文件,大约有200000行文字翻译。我想保留显示在选项卡后面的翻译文本

abaxial van  osovine
abbacy  opatstvo
abbaino     kora
abbatial    opatski
abbe    opat
abbé    opat
abbé    sveæenik
hematological parameters    hematološki pokazatelji

如何在选项卡的第一个实例之前去除所有字符?

这样您就可以使用正则表达式高效地处理字符串

导入java.util.regex.Matcher; 导入java.util.regex.Pattern

公共班机{

/**
 * Splits the line related to translation into 2 groups by splitting it on
 * two spaces " " and storing the splits into two named groups (key,
 * value)</br>
 * Group1 (key) is the text before the two spaces.</br>
 * Group2 (value) is the text after the two spaces.</br>
 */
private static final Pattern TRANSLATION_PATTERN = Pattern.compile("<key>.*)\\s\\s+(<value>.*)");

public static String grabTextAfterTwoSpaces(String input) {
    Matcher matcher = TRANSLATION_PATTERN.matcher(input);

    /*
     * You have to call .matches() for the regex to actually be applied.
     */
    if (!matcher.matches()) {
        throw new IllegalArgumentException(String.format("Provided input:[%s] did not contain two spaces", input));
    }

    return matcher.group("value");
}

public static void main(String[] args) {
    System.out.println(grabTextAfterTwoSpaces("abaxial van  osovine"));
    System.out.println(grabTextAfterTwoSpaces("abbacy  opatstvo"));
    System.out.println(grabTextAfterTwoSpaces("abbaino     kora"));
    System.out.println(grabTextAfterTwoSpaces("abbatial    opatski"));
    System.out.println(grabTextAfterTwoSpaces("abbe    opat"));
    System.out.println(grabTextAfterTwoSpaces("abbé    opat"));
    System.out.println(grabTextAfterTwoSpaces("abbé    sveæenik"));
    System.out.println(grabTextAfterTwoSpaces("abbacy  opatstvo"));

    System.out.println(grabTextAfterTwoSpaces("hematological parameters    hematološki pokazatelji"));
}
}

因此,如果对组使用value,则在2+空格之后将获得所有内容

奥索文

opatstvo

可拉

奥帕茨基

蛋白石

蛋白石

斯韦尼克

opatstvo

博卡扎特尔吉血液病


在翻译之前,您可以使用此正则表达式匹配所有内容:

 .+? {2,}
请联机尝试此正则表达式:

使用此正则表达式调用字符串上的replaceAll

yourString.replaceAll(".+? {2,}", "");
编辑:如果分隔符不是2个空格而是一个制表符,则可以尝试使用以下正则表达式:

.+?(?: {2,}|\t)

text.split\\s{2}\\s*@MartinErlic这很奇怪,因为\t不是空格。也许您的问题应该是:如何删除第一个制表符之前的所有文本?。或者最后,正如您的代码片段所做的那样。@MartinErlic那么,在您尝试操作数据之前,您可能应该弄清楚数据是什么。使用一个好的文本编辑器来显示空格和制表符,例如…混乱!!!问题标题删除选项卡后的所有字符。问题文本:删除两个空格前的所有字符。是制表符还是两个空格?需要删除之前还是之后的文本?如果问题不是关于空格,请编辑问题的文本以反映这一点。对不起,回答得好,但问题是错误的,两个空格实际上是制表符。请参阅。@Andreas已编辑。问题说的是…的第一个实例,所以正则表达式不应该以“+?”开头吗??使用like.+,它将替换所有实例,直到最后一个实例,而不是第一个实例。A喜欢?将在一开始停止。@Andreas我看到原始/翻译对都在单独的行中,所以这不会有什么区别,是吗?不过还是编辑了。对不起,回答得很好,但问题错了,两个空格实际上是制表符。看见