Java 从字符串值获取特定子字符串

Java 从字符串值获取特定子字符串,java,android,substring,Java,Android,Substring,我有以下日期: "Friday, January 31", "Wednesday, February 12", "Monday, February 17", "Wednesday, March 5", 我想设置一个字符串函数,在该函数中,我始终被赋予数字: 31 12 17 5 我从这个函数开始: String strCheck = suspendedDates[i]; int pos = strCheck.length(); int pos2 = strCheck.indexOf(" ")

我有以下日期:

"Friday, January 31",
"Wednesday, February 12",
"Monday, February 17",
"Wednesday, March 5",
我想设置一个字符串函数,在该函数中,我始终被赋予数字:

31
12
17
5
我从这个函数开始:

String strCheck = suspendedDates[i];
int pos = strCheck.length();
int pos2 = strCheck.indexOf(" ");
我现在被卡住了,因为它怎么知道是哪一个呢

有人能帮我完成这个功能吗。

使用而不是indexOf


从末尾获取子字符串。而不是试图找出位置

strCheck.substring(strCheck.length()-2);
这将使用最后两个字符。然后只需进行修剪,以防单个字符删除空格:-

strCheck.substring(strCheck.length()-2).trim();
另类


前面提到的另一个选项是对字符串执行lastIndexOf,并使用空格作为参数,该参数将从字符串末尾向后搜索,直到找到空格为止。但是,由于数字总是可以在2个字符空间中提取,我认为没有理由在每次提取已知位置长度为2的已知大小字符串2时进行2个字符比较,以便检索您已经知道的位置。

如果您试图将字符串分为多个部分进行解析,我建议使用String.split,看看javadocs和互联网上有很多很好的例子

作为@JigarJoshi answer的替代方法,如果您不介意,可以使用正则表达式,删除所有非数字字符

String result = dateString.replaceAll("[^\\d]+","");

您可以使用以下内容:

 String str = "Friday, January 31";
 Scanner s = new Scanner(s);
 s.useDelimiter( "\\D+" );
 while ( s.hasNextInt() ){
   s.nextInt(); // get int
 }

我必须把它寄出去;由于这是一个日期,我将使用date parse来允许对输入的格式进行额外检查:

另一种方法:

SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM DD");
Calendar cal = Calendar.getInstance();

cal.setTime(format.parse("Friday, January 31"));
System.out.println(new SimpleDateFormat("DD").format(cal.getTime()));

使用第二个SimpleDataFormatDD代替不推荐使用的getDate。

将采用第一个,如文档所述。返回指定子字符串第一次出现的字符串内的索引。代码太多。只需使用s.substringc.lastIndexOf,s.length,但如果以后要提取更多信息或格式更改,则更有效。太多的代码+正则表达式是一件沉重的事情。如果他只需要得到最后一个数字,并且格式相同,他应该使用:太多的代码。只需使用s.substringc.lastIndexOf,s。length@DanielNuriyev我不知道格式是否总是一样的,但另一件事你是对的,这就是为什么我开始我的答案作为替代;我不会复制粘贴其他答案如果他只需要查找最后一个数字,就不需要修改字符串。如果格式不变,只需执行:代码太多。只需使用s.substringc.lastIndexOf,s.lengthMy代码就可以找到给定的索引并提取所需的字符串,您的代码将从字符串的末尾进行向后搜索并进行比较,直到找到一个字符串。如果没有可选的修剪,我的代码实际上效率更高。看看修剪中的代码量,包括本例中不必要的代码。但差异很可能并不显著。让我们运行一百万次。+1如果格式始终相同,这是使用SimpleFormatDate的更面向对象的解决方案,@nachokk谢谢,是的,我可以,我想总有一个范围:-
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM DD");
Calendar cal = Calendar.getInstance();

cal.setTime(format.parse("Friday, January 31"));
System.out.println(new SimpleDateFormat("DD").format(cal.getTime()));