0

e 有一个可以接受 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语句,虽然我的括号是平衡的,但我不知道是否在嵌套括号的正确级别内添加了附加字符(例如,索引值 + 3)。话虽如此,我已经尝试将这些整数添加到顶部,但几乎无济于事。

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 解析这些的顺序是什么?我想不明白这些语句是如何被解析的,所以我有更好的理解操纵变量和测试输出的最佳方法。

4

3 回答 3

2

您错误地使用了 +3。您将它放在 if(condition) 语句之外,它没有任何语法意义 - 它在您的代码中是 gobbledygook。

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

于 2012-07-16T19:02:09.903 回答
1

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

也许使用带有dd/MM/yyyy格式的 SimpleDataFormat 或使用 split 会是更好的选择。

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);
于 2012-07-16T19:00:58.170 回答
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
于 2012-07-16T19:08:10.893 回答