gpt4 book ai didi

java - 在不使用 lastIndexOf 方法的情况下打印字符串中字符串的最后一个索引

转载 作者:行者123 更新时间:2023-11-29 04:37:23 26 4
gpt4 key购买 nike

注意:此问题是针对学校作业提出的。我觉得我已经接近真实代码了,只剩下几点需要处理。

我被要求编写一个方法来接收两个字符串(s1 和 s2)和敏感地检查 s2 是否在 s1 中。如果 s2 在 s1 中,则返回 s2 最后一次出现的索引,否则返回 -1。

所以,这是我的代码:

import java.util.*;
public class homework4 {


public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("\nEnter a choice: ");
int choice = input.nextInt();
if(choice == 1) {
System.out.println("Enter firts string: ");
String s1 = input.next();
System.out.println("Enter second string: ");
String s2 = input.next();
System.out.print(contains(s1,s2));
}
else {
//Call other methods...
}
public static int contains (String s1, String s2) {
for(int i = 0; i<s1.length(); i++) {
for(int j = 0; j<s2.length(); j++) {
char ch = s2.charAt(j);
if(s1.charAt(i) == ch) {
return i;
}
}
}
return -1;
}

但此方法返回 s2 的第一个索引或者它只是 IndexOf 方法的副本。s1 = aabbccbbes2 = bb 的输出是 2

编辑: @eli 的代码

import java.util.*;
public class homework4 {


public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("\nEnter a choice: ");
int choice = input.nextInt();
if(choice == 1) {
System.out.println("Enter firts string: ");
String s1 = input.next();
System.out.println("Enter second string: ");
String s2 = input.next();
System.out.print(contains(s1,s2));
}
else {
//Call other methods...
}
public static int contains(String s1, String s2) {
int i = s2.length()-1, j = s1.length()-1;

if(i > j)
return -1;

for(; i > -1; i--) {
for(; j >= 0; j--) {
if(s1.charAt(j) == s2.charAt(i)) {
if(i == 0)
return j;

if(j != 0)
j--;

break;
} else if(i != s2.length()) {
i = s2.length()-1;
}
}
}

return -1;
}

最佳答案

首先,关闭您打开的所有资源当您用完它

input.close();

如果允许,您可以使用正则表达式:

public static int contains (String s1, String s2) {
Pattern p = Pattern.compile(s2+"(?!.*"+s2+")");
Matcher m = p.matcher(s1);

if(m.find())
return m.start();

return -1;
}

正则表达式模式解释 here .

使用 find() 确保至少出现一次。由于该模式可以产生 1 个且仅产生 1 个结果,您只需在匹配器中请求“第一次出现的第一个索引”,使用 start() 实现。

编辑好的,我知道您只能使用 charAtlength。这是一个没有正则表达式、子字符串、indexOf 或其他任何东西的不同解决方案:

public static int contains(String s1, String s2) {
int i = s2.length()-1, j = s1.length()-1;

if(i > j)
return -1;

for(; i > -1; i--) {
for(; j >= 0; j--) {
if(s1.charAt(j) == s2.charAt(i)) {
if(i == 0)
return j;

if(j != 0)
j--;

break;
} else if(i != s2.length()) {
i = s2.length()-1;
}
}
}

return -1;
}

我必须承认我没有对此进行彻底测试。

最终我已经为你做了一些小的修复。我不知道您是如何编译您在帖子中编辑的内容的。这是一个工作示例:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class homework4 {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);

System.out.println("Enter choice: ");

switch (input.nextInt()) {
// If 1 is given as input...
case 1:
// As we press "enter" after inputting 1, the newline is read by the
// scanner. We skip this newline by doing this.
input.nextLine();

System.out.println("Enter first string: ");
String s1 = input.nextLine();

System.out.println("Enter second string: ");
String s2 = input.nextLine();

System.out.println("Result: " + contains(s1, s2));
break;
// If 2 is given as input (just for the sake of the example)
case 2:
System.out.println("You chose an unimplemented choice.");
break;
// If something else is given as input...
default:
System.out.println("Nothing to do...");
break;
}

// As Scanner is considered a resource, we have to close it, now that
// we're done using it.
input.close();
}

// This is the RegEx implementation
public static int containsRegx(String s1, String s2) {
Pattern p = Pattern.compile(s2 + "(?!.*" + s2 + ")");
Matcher m = p.matcher(s1);

if (m.find())
return m.start();

return -1;
}

// This is the charAt and length only
public static int contains(String s1, String s2) {
int i = s2.length() - 1, j = s1.length() - 1;

if(i > j || i * j == 0)
return -1;

for (; i > -1; i--) {
for (; j >= 0; j--) {
if (s1.charAt(j) == s2.charAt(i)) {
if (i == 0)
return j;

if (j != 0)
j--;

break;
} else if (i != s2.length()) {
i = s2.length() - 1;
}
}
}

return -1;
}
}

关于java - 在不使用 lastIndexOf 方法的情况下打印字符串中字符串的最后一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com