我很确定我真的很接近这个工作。我有一个包含批处理文件输出的文本文件。我想将文本文件中的计算机名称分配给JLabel selectedComputerFromAD。目前,文本文件输出如下所示:
"CN=COUD111235,OU=Workstations,OU=Mis,OU=Accounts,DC=FL,DC=NET"
我需要抓住CN等于所以我想要的是lblSelectedComputer = COUD111235 这是我到目前为止所拥有的。
ComputerQuery.sendParam();
String sCurrentLine = null, CN = null;
try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\anoc5f\\workspace\\ControlPanel\\resultofbatch.txt")))
{
while ((sCurrentLine = br.readLine()) != null)
{
if(sCurrentLine.matches(".*CN=([^,]*).*"))
{
Pattern p1 = Pattern.compile(".*CN=([^,]*),");
Matcher m = p1.matcher(sCurrentLine);
m.find();
CN = m.group(1);
}
}
if(CN != null)
{
//TODO do somethign with CN
System.out.println(CN);
}
else
{
System.out.println("CN not found");
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
目前选择的ComputerFromAD.setText(sCurrentLine);不起作用。我甚至都不确定我是否正在为它分配正确的变量。任何帮助表示赞赏。
答案 0 :(得分:1)
这对我有用:
String str = "CN=COUD111235,OU=Workstations,OU=Mis,OU=Accounts,DC=FL,DC=NET";
String regex = "CN=([^,]*),";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
m.find();
String computerName = m.group(1);
引用代码的完整示例:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args)
{
String sCurrentLine = null, CN = null;
try (BufferedReader br = new BufferedReader(new FileReader("resultofbatch.txt")))
{
while ((sCurrentLine = br.readLine()) != null)
{
if(sCurrentLine.matches(".*CN=([^,]*).*"))
{
Pattern p = Pattern.compile(".*CN=([^,]*),");
Matcher m = p.matcher(sCurrentLine);
m.find();
CN = m.group(1);
}
}
if(CN != null)
{
//TODO do somethign with CN
System.out.println(CN);
}
else
{
System.out.println("CN not found");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
你使用的模式错了。您没有拆分sCurrentLine
,而是拆分字符串","
。
你还需要从事件派发线程中调用setText()
,否则在完全重绘之前你不会看到它(如果你最小化并最大化帧,它应该变得可见)。< / p>
答案 2 :(得分:0)
这应该有效:
String CN = sCurrentLine.split("CN=",-1)[1].split(",",-1)[0];