首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

查寻指定字符串,将截取的字符串赋给数组

2012-10-14 
查找指定字符串,将截取的字符串赋给数组从一个文本文件1.h中:#endif /* DEV_CONFIG_H_ */// init function

查找指定字符串,将截取的字符串赋给数组
从一个文本文件1.h中:

#endif /* DEV_CONFIG_H_ */
// init function
//---------am_init-------
char* suit_am_init_NOTCALL_GN_01(void);
//--------am_announce_device--------
//--------am_announce_device-----max_call_number out of range--
char* suit_am_announce_device_MCN_OR_GN_01(void);
//--------am_announce_device-----max_insit_number out of range--
char* suit_am_announce_device_MIN_OR_GN_01(void);
//--------am_announce_device----default_reply_timeout set be 0--
char* suit_am_announce_device_DRT_0_GN_01(void);
//--------am_announce_device---max_credit out of range 8
char* suit_am_announce_device_MC_OR_GN_01(void);

将char* …………………………(void);中间的所有字符串,
例如“suit_am_announce_device_MC_OR_GN_01”...依次截取出来赋给一个数组。

-----------在处理字符串s的时候有问题---------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;

public class getTCarr
{
  public static void main(String[] args)
  {
  try
  {
  BufferedReader bf=new BufferedReader(new FileReader("c:/1.h"));
  String str=null;
  String s=null;
  while((str=bf.readLine())!=null)
  {
  Pattern pattern = Pattern.compile("^char\\*(.*?)\\(void\\);");
  Matcher matcher = pattern.matcher(str);
  while (matcher.find())
  {
  s=matcher.group(1);
  String[] TCarr=s.split("\n");
   
  for(int i=0;i<TCarr.length;i++)
  {
  System.out.println(TCarr[i]);
  }

  }

  }
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }
  }
}


[解决办法]
这种问题喜欢用正则来处理

Java code
import java.util.LinkedList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {    public static void main(String[] args) {        List<String> results = new LinkedList<String>();        String str = "#endif /* DEV_CONFIG_H_ */\n" +                "// init function\n" +                "//---------am_init-------\n" +                "char* suit_am_init_NOTCALL_GN_01(void);\n" +                "//--------am_announce_device--------\n" +                "//--------am_announce_device-----max_call_number out of range--\n" +                "char* suit_am_announce_device_MCN_OR_GN_01(void);\n" +                "//--------am_announce_device-----max_insit_number out of range--\n" +                "char* suit_am_announce_device_MIN_OR_GN_01(void);\n" +                "//--------am_announce_device----default_reply_timeout set be 0--\n" +                "char* suit_am_announce_device_DRT_0_GN_01(void);\n" +                "//--------am_announce_device---max_credit out of range 8\n" +                "char* suit_am_announce_device_MC_OR_GN_01(void);";        Pattern pattern = Pattern.compile("char\\*(.+?)\\(void\\)");        Matcher matcher = pattern.matcher(str);        while (matcher.find()) {            results.add(matcher.group(1));        }        for (String s : results) {            System.out.println(s);        }    }}
[解决办法]
代码逻辑有点错误,你的主体循环每次只能得到一行匹配内容,所以不能在循环内进行处理。

逻辑应该修改为:

Java code
List<String> results = new ArrayList<String>();while((str=bf.readLine())!=null) {  Pattern pattern = Pattern.compile("^char\\*(.*?)\\(void\\);");  Matcher matcher = pattern.matcher(str);  if (matcher.find()) {    String s=matcher.group(1);    results.add(s);  }}System.out.println("All:\n" + results); 

热点排行
Bad Request.