2015-08-21 34 views
1

我有一个文本文件,并且想要标记其行 - 但只有与#字符的句子。字符串的java tokenizer

例如,给定...

Buah... Molt bon concert!! #Postconcert #gintonic 

...我只想#Postconcert #gintonic打印。

我已经尝试过此代码一些变化......

public class MyTokenizer { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     tokenize("Europe3.txt","allo.txt"); 
    } 

    public static void tokenize(String sFile,String sFileOut) { 
     String sLine="", sToken=""; 
     MyBufferedReaderWriter f = new MyBufferedReaderWriter(); 
     f.openRFile(sFile); 
     MyBufferedReaderWriter fOut = new MyBufferedReaderWriter(); 
     fOut.openWFile(sFileOut); 
     while ((sLine=f.readLine()) != null) { 
      //StringTokenizer st = new StringTokenizer(sLine, "#"); 
      String[] tokens = sLine.split("\\#"); 
      for (String token : tokens) 
      { 
       fOut.writeLine(token); 
       //System.out.println(token); 
      } 
      /*while (st.hasMoreTokens()) { 
       sToken = st.nextToken(); 
       System.out.println(sToken); 
      }*/ 
     } 
     f.closeRFile(); 
    } 
} 

谁能帮助?

回答

1

你可以尝试一些像Regex

package com.stackoverflow.answers; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class HashExtractor { 

    public static void main(String[] args) { 
     String strInput = "Buah... Molt bon concert!! #Postconcert #gintonic"; 
     String strPattern = "(?:\\s|\\A)[##]+([A-Za-z0-9-_]+)"; 
     Pattern pattern = Pattern.compile(strPattern); 
     Matcher matcher = pattern.matcher(strInput); 
     while (matcher.find()) { 
      System.out.println(matcher.group()); 
     } 
    } 
} 
+0

非常感谢你,我认为我做到了! :D:D –

0

对于每个给出的示例中,使用分裂()时,函数值将存储这样的事:

tokens[0]=Buah... Molt bon concert!! 
tokens[1]=Postconcert 
tokens[2]=gintonic 

所以你只需要跳过第一个值并在其他字符串值中追加'#'(如果您需要)。

希望这会有所帮助。

0

你还没有特别要求这个,但我假设你尝试从你的文本文件中提取所有#hashtags。

要做到这一点,正则表达式是您的朋友:

String text = "Buah... Molt bon concert!! #Postconcert #gintonic"; 
System.out.println(getHashTags(text)); 

public Collection<String> getHashTags(String text) { 
    Pattern pattern = Pattern.compile("(#\\w+)"); 
    Matcher matcher = pattern.matcher(text); 
    Set<String> htags = new HashSet(); 
    while (matcher.find()) { 
     htags.add(matcher.group(1)); 
    } 
    return htags; 
} 

编译这样#\w+一个模式,即用#后面跟着一个或多个(+)字字符(\w)开始一切。

然后,我们必须逃脱\为java与\\

最后把这个表达式放在一个组中,通过用大括号(#\w+)包围它来获得匹配的文本。

对于每场比赛,将第一个匹配的组添加到集合htags,最后我们得到一个包含所有hashtags的集合。

[#gintonic, #Postconcert] 
+0

是的,这就是我想要做的,但它给我错误的getHasTags ... 我想从文本文件读取,标记它,然后将其保存在另一个文本文件中...我正在工作与许多文本行不只是一个,所以我使用缓冲reader.i不知道是否可以帮助你! –

+0

以及我想我做到了,但无论如何感谢您的帮助! –