Я хочу, чтобы получить информацию из сценария, так что я использовал эту функциюПолучить конкретный текст из текстового файла
public static HashMap<String, String> getEnvVariables(String scriptFile,String config) {
HashMap<String, String> vars = new HashMap<String, String>();
try {
FileInputStream fstream = new FileInputStream(scriptFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
String var= "if [ \"$1\" = \""+config +"\" ] ; then";
// Read File Line By Line
while ((strLine = br.readLine()) != null) {
// use a Scanner to parse the content of each line
// exclude concatenated variables (export xx:$xx)
if (strLine.startsWith("export") && !strLine.contains("$")) {
strLine = strLine.substring(7);
Scanner scanner = new Scanner(strLine);
scanner.useDelimiter("=");
if (scanner.hasNext()) {
String name = scanner.next();
String value = scanner.next();
System.out.println(name+"="+value);
vars.put(name, value);
}
}
}
Однако я хочу, чтобы начать чтение с определенной линии, которая
if [ \"$1\" = \""+config +"\" ] ; then
проблема в том, что когда строка начинается с пробела, программа считает, что файл закончился! Так как я могу исправить это и сделать парсы программы до конца файла? , учитывая, что линия может начинаться с более одного пробела thx
Хорошая идея, часто забывают простую '.trim()'. Хотя делайте это внутри '{...}', поскольку вы все еще не тестировали для strLine, являющегося нулевым. –
действует, только когда линия начинается только с одного места: – Rad1
@ Rad1 Что значит быть «эффективным»? Он также работает с несколькими пространствами. Для этого используется 'trim()'. – Zhedar