验证数据时,Java的lastIndexOf和indexOf的正确语法是什么?

时间:2012-07-16 18:57:21

标签: java string

有一个可以接受2或4位数年份的日期表格。我不是要为异常编写代码...只是年份长度为2或4位的情况。我正在使用lastIndexOf来查找“/”的最后一个实例,如果斜杠后面的第三个字符是数字,我假设一个4位数的年份。否则它是两位数的年份。

我已经测试并验证过这是现在唯一一个给我一个问题的路线,

if (inputLine.lastIndexOf.isNumeric("/"))+3 {
   year = inputLine.trim().substring(inputLine.lastIndexOf("/")+1,input.lastIndexOf("/")+4).trim);
   else year = "0000";

我不断收到编译错误。对于我要添加到索引值的行,我有一个bad operand for the binary operator。此外,找不到变量lastIndexOf。

我在程序的开头调用下面的列表,据我在java文档中可以看出,iolang引入了适当的方法和类。

import java.util.*;
import java.io.*;
import java.nio.file.*;
import java.lang.*;

对于if语句,虽然我的parens是平衡,但我不知道是否在正确的级别内添加其他字符(例如,索引值+3)嵌套的parens。话虽这么说,我试过顶部添加这些整数几乎无济于事。

if (inputLine.lastIndexOf.isNumeric("/"))+3 {
   year = inputLine.trim().substring(inputLine.lastIndexOf("/")+1,input.lastIndexOf("/")+4).trim);
   else year = "00/00/0000";

我想知道几个问题:首先,我可以在一个语句中执行此操作,还是在一个语句中定义索引,然后在后续语句中定义index + offset-value更好?

当我在单个字段上使用多个方法和类时(例如.trim().substring.Indexof()等),Java解析那些的顺序是什么?我想要解释这些语句是如何被解析的所以我对操作变量和测试输出的最佳方法有了更好的理解。

3 个答案:

答案 0 :(得分:2)

您错误地使用了+3。你把它放在if(条件)语句之外,在某个地方它没有任何语法意义 - 它在你的代码中是gobbledygook。

另外,如果你试图测试inputline.lastIndexOf('/')的结果是否为数字,那么它就没有任何意义。如果未发生指定的字符,则lastIndexOf不会抛出异常;它只会返回-1。您想测试结果是否大于/等于零。

答案 1 :(得分:1)

您不能使用trim()然后使用原始字符串中的索引。你需要修剪()字符串,然后使用修剪字符串中的索引(否则索引可能完全不正确)

使用具有dd/MM/yyyy格式的SimpleDataFormat或使用拆分可能是更好的选择。

String[] parts = inputLine.trim().split("/");
String day = parts[0], month = parts[1], year = parts[2];

使用trim()和lastIndexOf()

String trimmed = inputLine.trim();
int last = trimmed.lastIndexOf("/");
year = trimmed.substring(last+1);

答案 2 :(得分:1)

关于问题的最后部分

当你像.trim().substring.Indexof()那样进行方法链接时,每个方法都是按从左到右的顺序调用的。所以:

String myString = " string ";
int index = myString.trim.substring(3).indexOf('n');

可与之相媲美:

String myString = " string ";
String trimmedString = myString.trim(); // "string"
String subString = trimmedString.substring(3) // "ing"
int index = subString.indexOf('n'); // 1