Java examples for java.lang:String Substring
Replace occurrences of a substring.
/*/*from w w w . j a va 2 s . co m*/ * Static String formatting and query routines. * Copyright (C) 2001-2005 Stephen Ostermiller * http://ostermiller.org/contact.pl?regarding=Java+Utilities * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * See COPYING.TXT for details. */ //package com.java2s; public class Main { public static void main(String[] argv) { String s = "java2s.com"; String find = "java2s.com"; String replace = "java2s.com"; System.out.println(replace(s, find, replace)); } /** * Replace occurrences of a substring. * * StringHelper.replace("1-2-3", "-", "|");<br> * result: "1|2|3"<br> * StringHelper.replace("-1--2-", "-", "|");<br> * result: "|1||2|"<br> * StringHelper.replace("123", "", "|");<br> * result: "123"<br> * StringHelper.replace("1-2---3----4", "--", "|");<br> * result: "1-2|-3||4"<br> * StringHelper.replace("1-2---3----4", "--", "---");<br> * result: "1-2----3------4"<br> * * @param s String to be modified. * @param find String to find. * @param replace String to replace. * @return a string with all the occurrences of the string to find replaced. * @throws NullPointerException if s is null. * * @since ostermillerutils 1.00.00 */ public static String replace(String s, String find, String replace) { int findLength; // the next statement has the side effect of throwing a null pointer // exception if s is null. int stringLength = s.length(); if (find == null || (findLength = find.length()) == 0) { // If there is nothing to find, we won't try and find it. return s; } if (replace == null) { // a null string and an empty string are the same // for replacement purposes. replace = ""; } int replaceLength = replace.length(); // We need to figure out how long our resulting string will be. // This is required because without it, the possible resizing // and copying of memory structures could lead to an unacceptable runtime. // In the worst case it would have to be resized n times with each // resize having a O(n) copy leading to an O(n^2) algorithm. int length; if (findLength == replaceLength) { // special case in which we don't need to count the replacements // because the count falls out of the length formula. length = stringLength; } else { int count; int start; int end; // Scan s and count the number of times we find our target. count = 0; start = 0; while ((end = s.indexOf(find, start)) != -1) { count++; start = end + findLength; } if (count == 0) { // special case in which on first pass, we find there is nothing // to be replaced. No need to do a second pass or create a string buffer. return s; } length = stringLength - (count * (findLength - replaceLength)); } int start = 0; int end = s.indexOf(find, start); if (end == -1) { // nothing was found in the string to replace. // we can get this if the find and replace strings // are the same length because we didn't check before. // in this case, we will return the original string return s; } // it looks like we actually have something to replace // *sigh* allocate memory for it. StringBuffer sb = new StringBuffer(length); // Scan s and do the replacements while (end != -1) { sb.append(s.substring(start, end)); sb.append(replace); start = end + findLength; end = s.indexOf(find, start); } end = stringLength; sb.append(s.substring(start, end)); return (sb.toString()); } }