Buggy code:
public final class Strings { public static final String LINE_SEPARATOR ; private static final char [ ] hexDigit = new char [ ] { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' } ; private static final Pattern htmlNumber = Pattern . compile ( "\\&\\#\\d+\\;" ) ; public static String afterFirst ( final String s , final char c ) { } public static String afterFirstPathComponent ( final String path , final char separator ) { } public static String afterLast ( final String s , final char c ) { } public static String beforeFirst ( final String s , final char c ) { } public static String beforeLast ( final String s , final char c ) { } public static String beforeLastPathComponent ( final String path , final char separator ) { } public static String capitalize ( final String s ) { } public static CharSequence escapeMarkup ( final String s ) { } public static CharSequence escapeMarkup ( final String s , final boolean escapeSpaces ) { } public static CharSequence escapeMarkup ( final String s , final boolean escapeSpaces , final boolean convertToHtmlUnicodeEscapes ) { } public static String firstPathComponent ( final String path , final char separator ) { } public static String fromEscapedUnicode ( String escapedUnicodeString ) { } public static boolean isEmpty ( final CharSequence string ) { } public static boolean isEqual ( final String string1 , final String string2 ) { } public static boolean isTrue ( final String s ) throws StringValueConversionException { } public static String join ( String separator , String [ ] fragments ) { } public static String lastPathComponent ( final String path , final char separator ) { } public static CharSequence replaceAll ( final CharSequence s , final CharSequence searchFor , CharSequence replaceWith ) { } public static String replaceHtmlEscapeNumber ( String str ) { } public static String [ ] split ( final String s , final char c ) { } public static String stripEnding ( final String s , final String ending ) { } public static String stripJSessionId ( CharSequence url ) { } public static Boolean toBoolean ( final String s ) throws StringValueConversionException { } public static char toChar ( final String s ) throws StringValueConversionException { } public static String toEscapedUnicode ( String unicodeString ) { } public static CharSequence toMultilineMarkup ( final CharSequence s ) { } public static String toString ( final Object object ) { } public static String toString ( final Component component , final Throwable location ) { } private static boolean shouldSkip ( String text , String [ ] filters ) { } public static String toString ( final Throwable throwable ) { } private static void append ( AppendingStringBuffer buffer , CharSequence s , int from , int to ) { } private static void outputThrowable ( Throwable cause , AppendingStringBuffer sb , boolean stopAtWicketServlet ) { } private static int search ( final CharSequence s , String searchString , int pos ) { int matchIndex = - 1 ; if ( s instanceof String ) { matchIndex = ( ( String ) ( s ) ) . indexOf ( searchString , pos ) ; } else if ( s instanceof StringBuffer ) { matchIndex = ( ( StringBuffer ) ( s ) ) . indexOf ( searchString , pos ) ; } else if ( s instanceof AppendingStringBuffer ) { matchIndex = ( ( AppendingStringBuffer ) ( s ) ) . indexOf ( searchString , pos ) ; } else { <START_BUG> matchIndex = s . toString ( ) . indexOf ( searchString ) ; <END_BUG> } return matchIndex ; } private static char toHex ( int nibble ) { } private Strings ( ) { } }

Fix:
matchIndex = s . toString ( ) . indexOf ( searchString , pos ) ;