Here you can find the source of lastIndexOf(final CharSequence cs, final int searchChar, int start)
cs
of the last occurrence of the specified character, searching backward starting at the specified index.
Parameter | Description |
---|---|
cs | the CharSequence to be processed |
searchChar | the char to be searched for |
start | the start index, negative returns -1, beyond length starts at end |
static int lastIndexOf(final CharSequence cs, final int searchChar, int start)
//package com.java2s; /*/*from www .j a v a 2 s. c o m*/ * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class Main { private static final int NOT_FOUND = -1; /** * Returns the index within <code>cs</code> of the last occurrence of * the specified character, searching backward starting at the * specified index. For values of <code>searchChar</code> in the range * from 0 to 0xFFFF (inclusive), the index returned is the largest * value <i>k</i> such that: * <blockquote><pre> * (this.charAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) * </pre></blockquote> * is true. For other values of <code>searchChar</code>, it is the * largest value <i>k</i> such that: * <blockquote><pre> * (this.codePointAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) * </pre></blockquote> * is true. In either case, if no such character occurs in <code>cs</code> * at or before position <code>start</code>, then <code>-1</code> is returned. * * <p>All indices are specified in <code>char</code> values * (Unicode code units). * * @param cs the {@code CharSequence} to be processed * @param searchChar the char to be searched for * @param start the start index, negative returns -1, beyond length starts at end * @return the index where the search char was found, -1 if not found * @since 3.6 updated to behave more like <code>String</code> */ static int lastIndexOf(final CharSequence cs, final int searchChar, int start) { if (cs instanceof String) { return ((String) cs).lastIndexOf(searchChar, start); } final int sz = cs.length(); if (start < 0) { return NOT_FOUND; } if (start >= sz) { start = sz - 1; } if (searchChar < Character.MIN_SUPPLEMENTARY_CODE_POINT) { for (int i = start; i >= 0; --i) { if (cs.charAt(i) == searchChar) { return i; } } } //supplementary characters (LANG1300) //NOTE - we must do a forward traversal for this to avoid duplicating code points if (searchChar <= Character.MAX_CODE_POINT) { final char[] chars = Character.toChars(searchChar); //make sure it's not the last index if (start == sz - 1) { return NOT_FOUND; } for (int i = start; i >= 0; i--) { final char high = cs.charAt(i); final char low = cs.charAt(i + 1); if (chars[0] == high && chars[1] == low) { return i; } } } return NOT_FOUND; } /** * Used by the lastIndexOf(CharSequence methods) as a green implementation of lastIndexOf * * @param cs the {@code CharSequence} to be processed * @param searchChar the {@code CharSequence} to be searched for * @param start the start index * @return the index where the search sequence was found */ static int lastIndexOf(final CharSequence cs, final CharSequence searchChar, final int start) { return cs.toString().lastIndexOf(searchChar.toString(), start); // if (cs instanceof String && searchChar instanceof String) { // // TODO: Do we assume searchChar is usually relatively small; // // If so then calling toString() on it is better than reverting to // // the green implementation in the else block // return ((String) cs).lastIndexOf((String) searchChar, start); // } else { // // TODO: Implement rather than convert to String // return cs.toString().lastIndexOf(searchChar.toString(), start); // } } }