请求帮助,读取文件中某行的特定字符串,尝试了N多种方法,未能实现!!

soyestrellafortuna 2008-04-17 03:50:31
JAVA读取ORACLE的配置文件,想提取出红色部分的内容。不知道如何进展了。
现在只能做到读取到每一行数据,但不知道如何把需要的部分取出来。希望大家帮助一下,谢谢大家!!!

[code=INIFile]
# TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

DBTEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.215.130)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)
)

DBNEW =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.235.129)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbnew)
)
)

[/code]

...全文
153 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
soyestrellafortuna 2008-04-17
  • 打赏
  • 举报
回复
果然很强大!!!再次感谢火龙果。我要好好研究研究了。

现在结贴。
kokobox 2008-04-17
  • 打赏
  • 举报
回复
果子, 强!!!
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

private final String regex =
"(\\w+)\\s*=.*?" +
"\\(\\s*HOST\\s*=\\s*(\\d{1,3}(?:\\.\\d{1,3}){3}).*?" +
"\\(\\s*PORT\\s*=\\s*(\\d{1,5}).*?" +
"\\(\\s*SERVICE_NAME\\s*=\\s*(\\w+)";
private Pattern pattern = null;

public static void main(String args[]) throws FileNotFoundException {
Test test = new Test();
File file = new File("f:/abc.txt");
List<OracleConfiguration> list = test.get(file);
for(OracleConfiguration conf : list) {
System.out.println(conf);
}
}

/**
* Find pattern from file
* JDK version must be above 1.5
*/
public List<OracleConfiguration> get(File file) throws FileNotFoundException {
List<OracleConfiguration> list = new ArrayList<OracleConfiguration>();
Scanner scanner = new Scanner(file);
if(pattern == null) {
pattern = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
}
String str = scanner.findWithinHorizon(pattern, 0);
while(str!=null) {
MatchResult matcher = scanner.match();
str = scanner.findWithinHorizon(pattern, 0);
OracleConfiguration conf = new OracleConfiguration();
conf.setName(matcher.group(1));
conf.setHost(matcher.group(2));
conf.setPort(matcher.group(3));
conf.setServiceName(matcher.group(4));
list.add(conf);
}
scanner.close();
return list;
}

/**
* Find pattern from string
*/
public List<OracleConfiguration> get(String str) {
if(pattern == null) {
pattern = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
}
List<OracleConfiguration> list = new ArrayList<OracleConfiguration>();
Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
OracleConfiguration conf = new OracleConfiguration();
conf.setName(matcher.group(1));
conf.setHost(matcher.group(2));
conf.setPort(matcher.group(3));
conf.setServiceName(matcher.group(4));
list.add(conf);
}
return list;
}
}
nihuajie05 2008-04-17
  • 打赏
  • 举报
回复
....某某人不是再也不回正则的嘛....
哎....
  • 打赏
  • 举报
回复
如果是文件的话,需要再改一下,稍候。。。
  • 打赏
  • 举报
回复
正则表达式最适合做这种事情了(从字符串中抽取特定的东西)。
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

private final String regex =
"(\\w+)\\s*=.*?" +
"\\(\\s*HOST\\s*=\\s*(\\d{1,3}(?:\\.\\d{1,3}){3}).*?" +
"\\(\\s*PORT\\s*=\\s*(\\d{1,5}).*?" +
"\\(\\s*SERVICE_NAME\\s*=\\s*(\\w+)";
private Pattern pattern = null;

public static void main(String args[]) throws IOException {
String str =
"# TNSNAMES.ORA Network Configuration File: E:\\oracle\\ora92\\network\\admin\\tnsnames.ora\n" +
"# Generated by Oracle configuration tools.\n" +
"\n" +
"DBTEST =\n" +
" (DESCRIPTION =\n" +
" (ADDRESS_LIST =\n" +
" (ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.215.130)(PORT = 1521))\n" +
" )\n" +
" (CONNECT_DATA =\n" +
" (SERVICE_NAME = dbtest)\n" +
" )\n" +
" )\n" +
"\n" +
"DBNEW =\n" +
" (DESCRIPTION =\n" +
" (ADDRESS_LIST =\n" +
" (ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.235.129)(PORT = 1521))\n" +
" )\n" +
" (CONNECT_DATA =\n" +
" (SERVICE_NAME = dbnew)\n" +
" )\n" +
" )";
Test t = new Test();
List<OracleConfiguration> list = t.get(str);
for(OracleConfiguration conf : list) {
System.out.println(conf);
}
}

public List<OracleConfiguration> get(String str) {
if(pattern == null) {
pattern = Pattern.compile(regex, Pattern.DOTALL);
}
List<OracleConfiguration> list = new ArrayList<OracleConfiguration>();
Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
OracleConfiguration conf = new OracleConfiguration();
conf.setName(matcher.group(1));
conf.setHost(matcher.group(2));
conf.setPort(matcher.group(3));
conf.setServiceName(matcher.group(4));
list.add(conf);
}
return list;
}
}

class OracleConfiguration {
private String name;
private String host;
private String port;
private String serviceName;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
@Override
public String toString() {
return "Name: " + name + ", Host: " + host + ", Port: " + port + ", Service Name: " + serviceName;
}
}
soyestrellafortuna 2008-04-17
  • 打赏
  • 举报
回复
忘记代码中不可以使用颜色了,不好意思。

。。。。。
DBNEW =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.235.129)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbnew)
)
)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧