Gå til innhold

substring i java. 2 strenger, teste om streng 2 er med i streng 1.


Anbefalte innlegg

hei. jeg skal lage dette programmet:

 

Du skal i denne oppgaven lage et program som leser inn to tekststrenger og sjekker om den siste er en delstreng i den første, om den siste forekommer i den første. De to tekststrengene leses inn fra main-metoden. Deretter kalles en klassemetode som utfører undersøkelsen. Metoden returnerer en boolsk verdi som bekrefter eller avkrefter at streng nr. to er en delstreng i streng nr. en. Dersom det er tilfelle skal programmet også skrive ut hvor delstrengen starter. Alle sløyfestrukturer i denne oppgaven skal styres av boolske variabler, betingelser skal erstattes med boolske variabler.

 

foreløpig har jeg denne koden:

 

import javax.swing.JOptionPane;

public class Oppgave2C 
{
public static void main(String[] args) 
{
	String	streng1, streng2;
	String 	inputStreng1, inputStreng2;



	inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1");
	streng1 = inputStreng1;

	inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2");
	streng2 = inputStreng2;






	System.out.println("streng1:   "+streng1);
	System.out.println("streng2:   "+streng2);
	System.out.println();


	boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2);

	if(substringOf==true)
		System.out.println(streng2);

}

public static boolean SubstringOf(String streng1, String streng2)
{

	for(int i=0; i<streng1.length(); i++)
	{
		if(streng2.equals(streng1.substring(i)))
			return true;
	}

	return false;
}
}

 

men får det ikke helt til.

 

noen som kan hjelpe meg med siste resten :)

 

takk på fårhånd:)

Lenke til kommentar
Videoannonse
Annonse

Hvis du kun skal sjekke om streng2 er en substring av streng1 trenger du vel kun noe som

if(string2.equals(streng1.substring(i, i+string2.length) {

return true;

}

[/code}

 

Hvis du skal sjekke motsatt trenger du kun en for-løkke til. Også må du avslutte for-løkka di på i < (streng1.length - streng2.length)

Lenke til kommentar

Vanligvis bruker jeg ikke å komme med komplette besvarelser til oppgaver, men siden du tydeligvis har jobbet seriøst med dette, så tenkte jeg at jeg skulle hjelpe deg.

 

I stedet for å bruke for-løkke, bruker jeg String sin indexOf()-metode. Denne returnerer posisjonen når den finner en forekomst, ellers returnerer den -1.

 

import javax.swing.JOptionPane;

public class Oppgave2C {
 private static int where;

 public static void main(String[] args) {
String streng1, streng2;
String inputStreng1, inputStreng2;

inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1");
streng1 = inputStreng1;

inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2");
streng2 = inputStreng2;

System.out.println("streng1:   " + streng1);
System.out.println("streng2:   " + streng2);
System.out.println();

boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2);

if (substringOf == true)
  System.out.println("\"" + streng2 + "\" starter på posisjon " + where);

 }

 public static boolean SubstringOf(String streng1, String streng2) {

// indexOf returnerer posisjon ved treff, eller -1 ved ikke treff
return ((where = streng1.indexOf(streng2)) != -1);
 }
}

 

Hilsen Werner

Lenke til kommentar

 

Den gir svar på om streng a er del av streng b, men ikke hvor den er i streng b, noe oppgaven ba om.

Dermed blir indexof() den beste løsningen i dette tilfellet...

 

Selv om NevroMance nok hadde en løsning som ligger nærmere hva de etterspør (siden det er en egen implementasjon og ikke bare bruk av biblioteket)...

Lenke til kommentar
  • 1 år senere...

Hei, ser dette er en gammel post, men har en lignende oppgave jeg har slitt litt med, men lurer på om noen kloke hoder kan fortelle meg hvorfor vi må legge static int where før metoden? Altså jeg har en egen klasse for SubstringOf som heter delStreng. Hvis jeg deklarerer int i den metoden og i main, vil den ikke kunne finne where. Men hvis jeg legger den før metoden main eller før metoden SubstringOf i delStreng klassen fungerer det.

 

Er forholdvis nybegynner så ville bare lære hvorfor den står der?

 

import javax.swing.JOptionPane;

public class Oppgave2C {
 private static int where;

 public static void main(String[] args) {
String streng1, streng2;
String inputStreng1, inputStreng2;

inputStreng1 = JOptionPane.showInputDialog("Skriv inn streng1");
streng1 = inputStreng1;

inputStreng2 = JOptionPane.showInputDialog("skriv inn streng2");
streng2 = inputStreng2;

System.out.println("streng1:   " + streng1);
System.out.println("streng2:   " + streng2);
System.out.println();

boolean substringOf = Oppgave2C.SubstringOf(streng1, streng2);

if (substringOf == true)
  System.out.println("\"" + streng2 + "\" starter på posisjon " + where);

 }

 public static boolean SubstringOf(String streng1, String streng2) {

// indexOf returnerer posisjon ved treff, eller -1 ved ikke treff
return ((where = streng1.indexOf(streng2)) != -1);
 }
}

Lenke til kommentar

Det er ganske vanskelig å forklare akkurat hvorfor uten at du har en bedre forståelse for hvordan OOP fungerer, men for å si det enkelt, main-metoden din må være statisk, og skal en statisk metode nå noe i klassen uten å ha en referanse til et objekt, må den være statisk.

 

where er delt mellom alle instanser av klassen. Det er i det hele tatt en dårlig løsning. where bør fjernes, subString-metoden din bør ta inn en int where, og main-metoden må mellomlagre hvor langt i strengen den har kommet.

 

subStringOf bør returnere indexen, som string.indexOf, deretter kan du sjekke

 

int where = subStringOg(streng1, streng2);
if (where >= 0) {
System.out.println("\"" + streng2 + "\" starter på posisjon " + where);
}

Endret av pgdx
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...