Alles außer Muster in String ersetzen

metalfan

Aktives Mitglied
Hi,

diese Funktion funktioniert, aber kann man das auch "besser" lösen?

Java:
package sax.test;

import java.util.ArrayList;
import java.util.Arrays;

public class Regex {

	

		/**
		 * input:
		 * 		random string, a-z, random length
		 * 		and a pattern "abc" for example
		 *		pattern can be a-y, length min: 3 max: string.length()
		 * output:
		 * 		input string with anything but the pattern replaced with Z
		 * 
		 * example:
		 * 		input: "aaaddd", pattern "ddd", output "ZZZddd"
		 * 		input: "adddb", pattern "ad", output "ZZddb"
		 * 		input: "ccchhhccc", pattern "hhhc", output: "ZZZhhhcZZ"
		 * 		input: "jjjiiikkk", pattern "jjj", output: "jjjZZZZZZ"
		 * 
		 * @param sax_result
		 * @return
		 */
		
		
		public static void replaceString2(String input, String pattern) {
			System.out.println("input: " + input);
			StringBuilder tmp = new StringBuilder();

			for (int n=0; n<= input.length()-1; n++) {
				tmp.append('Z');
			}
			
			
			
			System.out.println("tmp: " + tmp);
			ArrayList<Integer> positions_of_pattern = new ArrayList<Integer>();
			
			// find all positions of the pattern in string
			for (int n=0; n <= input.length()-1-pattern.length()-1; n++) {
				int index = input.indexOf(pattern, n);
				
				if (index != -1) {
					if (! positions_of_pattern.contains(index)) {
						positions_of_pattern.add(index);
					}
				}
				
			}
			
			System.out.println("position of pattern: " + positions_of_pattern);
			
			char[] tmpCharArray = tmp.toString().toCharArray();
			char[] patternCharArray = pattern.toCharArray();
			
			
			for (int n=0; n<= tmpCharArray.length; n++) {
				
				if (positions_of_pattern.size() >= 1) {
					if (n == positions_of_pattern.get(0)) {
						for (char x: patternCharArray) {
							tmpCharArray[n] = x;
							n++;
						}
						positions_of_pattern.remove(0);
					}
				
				}
			}
			
			System.out.println("output:");
			System.out.println(tmpCharArray);
			System.out.println("\n");
		}
		
		
		public static void main(String[] args) {
			ArrayList<String> inputStrings = new ArrayList<String>(Arrays.asList( "bdddb", "dddhhh", "aaadddaddd"));
			String pattern = "ddd";
			for (String x: inputStrings)  {
				//System.out.println(replaceString(x));
				replaceString2(x, pattern);
			}
		}
}
 

metalfan

Aktives Mitglied
ups, da war noch ein fehler drin.

aaadddddd

funktionierte nicht, jetzt aber:


Java:
import java.util.ArrayList;
import java.util.Arrays;

public class Regex {

	

		/**
		 * input:
		 * 		random string, a-z, random length
		 * 		and a pattern "abc" for example
		 *		pattern can be a-y, length min: 3 max: string.length()
		 * output:
		 * 		input string with anything but the pattern replaced with Z
		 * 
		 * example:
		 * 		input: "aaaddd", pattern "ddd", output "ZZZddd"
		 * 		input: "adddb", pattern "ad", output "ZZddb"
		 * 		input: "ccchhhccc", pattern "hhhc", output: "ZZZhhhcZZ"
		 * 		input: "jjjiiikkk", pattern "jjj", output: "jjjZZZZZZ"
		 * 
		 * @param sax_result
		 * @return
		 */
		
		
		public static void replaceString2(String input, String pattern) {
			System.out.println("input: " + input);
			StringBuilder tmp = new StringBuilder();

			for (int n=0; n<= input.length()-1; n++) {
				tmp.append('Z');
			}
			
			
			
			
			ArrayList<Integer> positions_of_pattern = new ArrayList<Integer>();
			
			// find all positions of the pattern in string
			for (int n=0; n <= input.length()-1; n++) {
				int index = input.indexOf(pattern, n);
				
				if (index != -1) {
					if (! positions_of_pattern.contains(index)) {
						positions_of_pattern.add(index);
						n = index + pattern.length()-1;
					}
				}
				
			}
			
			System.out.println("position of pattern: " + positions_of_pattern);
			
			char[] tmpCharArray = tmp.toString().toCharArray();
			char[] patternCharArray = pattern.toCharArray();
			
			
			for (int n=0; n<= tmpCharArray.length; n++) {
				
				if (positions_of_pattern.size() >= 1) {
					if (n == positions_of_pattern.get(0)) {
						for (char x: patternCharArray) {
							tmpCharArray[n] = x;
							n++;
						}
						// input: ededddddd      the last "ddd" will not be replaced
						// without the n--
						n--;
						positions_of_pattern.remove(0);
					}
				
				}
			}
			
			System.out.println("output:");
			System.out.println(tmpCharArray);
			System.out.println("\n");
		}
		
		
		public static void main(String[] args) {
			ArrayList<String> inputStrings = new ArrayList<String>(Arrays.asList("ededddddd", "bdddb", "dddhhh", "aaadddaddd"));
			String pattern = "ddd";
			for (String x: inputStrings)  {
				//System.out.println(replaceString(x));
				replaceString2(x, pattern);
			}
		}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Aruetiise Methoden write() schreibt nicht alles Allgemeine Java-Themen 4
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
MQue JTable alles rechts Allgemeine Java-Themen 8
C Funktion stoppt alles Allgemeine Java-Themen 7
P Properties liest nicht alles aus Datei aus Allgemeine Java-Themen 17
M Alles doppelt in Eclipse syntaxhilfe Allgemeine Java-Themen 6
T Was gehört alles in eine vollständige Dokumentation Allgemeine Java-Themen 3
G Was soll noch alles in Java kommen? Allgemeine Java-Themen 14
G NumberFormat akzeptiert alles Allgemeine Java-Themen 6
T ReplaceAll (außer) Allgemeine Java-Themen 11
I Muster in Array suchen Allgemeine Java-Themen 10
Meeresgott OOP Factory Muster ausbauen Allgemeine Java-Themen 34
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
B Muster in 2D-Array finden Allgemeine Java-Themen 4
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
G ThreadLocal in Muster "Unit of Work" Allgemeine Java-Themen 7
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
S Kompositum Muster ohne Exception oder instanceof Operator Allgemeine Java-Themen 6
M RegEx: Muster ersetzen Allgemeine Java-Themen 6
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
G String nach Muster durchsuchen Allgemeine Java-Themen 5
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
M Rekursiv Verzeichnisse ansehen und auf Muster matchen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben