我正在尝试从串行调制解调器获得响应并将其存储到BufferedReader中。这是输出:
imsiAT + CIMI
IMSI
imsi510011130957977
IMSI
imsiOK
我希望使用以下代码获取" 510011130957977" 的值:
os.print("AT+CIMI");
os.print("\n");
String responInput20000;
try {
while ((imsi = reader.readLine())!=null) {
System.out.println("imsi"+imsi);
txtOutput.insert(imsi.replace("\n", "").replace("\r", "").replace("OK", "").replace("AT+CIMI", "")+"\n", 0);
lblImsi.setText(imsi.replace("\n", "").replace("\r", "").replace("OK", "").replace("AT+CIMI", "").replace("\n\r",""));
if(imsi.equals("OK")){
break;
}
但JTextArea
仍然包含两个空行。也许还有其他解决方案吗?
答案 0 :(得分:0)
如果您不使用replace()
方法满足您的需求,那将会更容易(也更快):
while ((imsi = reader.readLine()) != null) {
if (!imsi.isEmpty() && !imsi.equals("OK") && !imsi.equals("AT+CIMI") {
txtOutput.insert(imsi);
lblImsi.setText(imsi);
}
}
无需替换这些字符串(您可以省略它们)。自从使用readLine()
阅读后,您的字符串中找不到任何换行符(\r\n
)!
答案 1 :(得分:0)
您可以创建这样的方法,消耗所有读者内容并发现您需要的值:
private static String getValue(BufferedReader reader) throws IOException {
String value = null;
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
String str = line.substring("imsi".length());
if ("".equals(str)) {
continue;
}
if ("OK".equals(str)) {
break;
}
value = str;
}
return value;
}
答案 2 :(得分:0)
您可以尝试使用匹配器匹配正则表达式(在这种情况下为数字)
fclose($fp);
这对我有用..