我想節省一些時間,而不是手動測試解析文件中的每個標記,但似乎我不知道如何正確使用java.util.Scanner
類的skip(String)
方法。如何在使用java.util.Scanner對象的方法skip(String)時忽略換行符?
重新說明這個問題:我該如何讓兩個測試都通過?
import java.io.StringReader;
import java.util.Scanner;
import junit.framework.Assert;
import org.junit.Test;
public class ScannerTest {
static private final String text = "FUNCTION_BLOCK Unnamed_project\n\tVAR_INPUT\n\t\tUnnamed_variable1 : REAL;\n\tEND_VAR\nEND_FUNCTION_BLOCK";
@Test
public void scannerSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
sc.skip("(?i)FUNCTION_BLOCK");
String blockName = sc.next();
assert sc.hasNext("(?i)VAR_INPUT"); // added test
sc.skip("(?i)VAR_INPUT"); // line of failure
String variableName = sc.next();
sc.skip(":");
String type = sc.next();
sc.skip("(?i)END_VAR");
sc.skip("(?i)END_FUNCTION_BLOCK");
assert "Unnamed_project".equals(blockName);
assert "Unnamed_variable1".equals(variableName);
assert "REAL".equals(type);
}
@Test
public void scannerWithoutSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
String skipped = sc.next();
assert "FUNCTION_BLOCK".equalsIgnoreCase(skipped);
String blockName = sc.next();
skipped = sc.next();
assert "VAR_INPUT".equalsIgnoreCase(skipped);
String variableName = sc.next();
skipped = sc.next();
assert ":".equalsIgnoreCase(skipped);
String type = sc.next();
skipped = sc.next();
assert "END_VAR".equalsIgnoreCase(skipped);
skipped = sc.next();
assert "END_FUNCTION_BLOCK".equalsIgnoreCase(skipped);
assert "Unnamed_project".equals(blockName);
assert "Unnamed_variable1".equals(variableName);
assert "REAL".equals(type);
}
}
任何提示和提示讚賞。
找到了正確的方法做,這是包圍用'next'機智取代所有'skip'方法調用hout存儲結果。 – Tuto