我正在练习面试,我被问到了一个创建字符串方法的问题 indexOf 不使用字符串方法。我的第一个想法是将字符串处理成 char[] 但我不知道如果不使用 .toCharArray() 如果有人曾被问到这个面试问题,我会喜欢你的意见。
indexOf
char[]
.toCharArray()
zpf6vheq1#
public static int customIndexOf(String string,char character) { String c = String.valueOf(character); Scanner sc = new Scanner(string).useDelimiter(Pattern.compile("")); int i=0; while(sc.hasNext()) { if (sc.next().equals(c)) { return i; } i++; } return -1; }
ddhy6vgd2#
您可以定义一个实用程序方法来访问 value 示例变量 String 并返回该字符串中字符的第一个位置(如果存在),或-1(如果不存在):
value
String
public class ReflectedUtils { public static final int indexOf(String s, char c) { int position = -1; try { Class clazz = Class.forName("java.lang.String"); Constructor constructor = clazz.getDeclaredConstructor(clazz); String ztring = (String) constructor.newInstance(s); Field field = ztring.getClass().getDeclaredField("value"); field.setAccessible(true); char[] chars = (char[]) field.get(ztring); for (int i=0; i<chars.length; i++) { if(chars[i] == c) { position = i; break; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } finally { return position; } } public static void main(String... args) { System.out.print(String.valueOf(ReflectedUtils.indexOf("Hello", 'e'))); } }
0dxa2lsx3#
不使用 String 将字符串“转换”为字符数组的唯一选项是使用反射:
char[] c = String.class.getDeclaredField( "value" ).get( "your string" );
请注意,您必须捕获异常等。还有一个重要的注意事项:这是非常不安全的,因为您永远不知道该字段是否被调用 value 在任何实施中。这不是 String 班级。还要注意,结果数组可能比实际字符串大,即空终止字符可能在任何位置。
pod7payv4#
这很难;老实说我不知道。我想知道这些答案是否有用在java中,迭代字符串的字符最简单/最好/最正确的方法是什么?有一个答案是 StringCharacterIterator .
StringCharacterIterator
c6ubokkw5#
如果您的输入是 CharSequence ,您可以这样做:
CharSequence
CharSequence str = yourString; char[] chars = new char[str.length()]; for (int i = chars.length; i-->0;) { chars[i] = str.charAt(i); } //chars now contains the characters of the string
5条答案
按热度按时间zpf6vheq1#
ddhy6vgd2#
您可以定义一个实用程序方法来访问
value
示例变量String
并返回该字符串中字符的第一个位置(如果存在),或-1(如果不存在):0dxa2lsx3#
不使用
String
将字符串“转换”为字符数组的唯一选项是使用反射:请注意,您必须捕获异常等。
还有一个重要的注意事项:这是非常不安全的,因为您永远不知道该字段是否被调用
value
在任何实施中。这不是String
班级。还要注意,结果数组可能比实际字符串大,即空终止字符可能在任何位置。pod7payv4#
这很难;老实说我不知道。
我想知道这些答案是否有用
在java中,迭代字符串的字符最简单/最好/最正确的方法是什么?
有一个答案是
StringCharacterIterator
.c6ubokkw5#
如果您的输入是
CharSequence
,您可以这样做: