Substituição de palavras (String)

Boa tarde colegas, estou com um problema aqui assim:

~ Carlos foi a festa ^ Sara também.

tenho que substituir “Carlos foi a festa” por “P”(pode ser qualquer Caractere), o mesmo para “Sara também”, tenho q substituir por um simbolo por exemplo “Q”.

Assim ficaria a Saída:

~ P ^ Q.

agradeço desde já qualquer ajuda.

De um jeito bem grosseiro:

public class TesteReplaceString {

	public static void main(String[] args) {

		String s = "~ Carlos foi a festa ^ Sara também";

		String s2 = s.replace("Carlos foi a festa", "P");
		s2 = s2.replace("Sara também", "Q");

		System.out.println(s2);
	}

}

Não sei exatamente qual o sua intenção, mas acho q você deveria criar um objeto no qual possa guardar a sentença, a letra e ainda se o fato é verdade ou não. Aí você pode fazer o que quiser com esse objeto. Veja um exemplo:

public class TestePreposicao {
    
  public static void main(String [] args) {
      
      Preposicao P = new Preposicao("Carlos foi a festa", "P", true);
      Preposicao Q = new Preposicao("Sara também", "Q", false);
      
      new TestePreposicao().resolvePreposicao(P, Q, "^");
      
  }
  
  public void resolvePreposicao(Preposicao p1, Preposicao p2, String operacao){
      
      if (operacao.equals("^")){
          
          System.out.println(p1.getSentenca() + " " + operacao + " " + p2.getSentenca() + " = " + (p1.isVerdade() && p2.isVerdade()));
          
      }
      // Outras operações...
      
  }
    
}

class Preposicao{
    String sentenca;
    String letra;
    boolean verdade;

    public Preposicao(String sentenca, String letra, boolean verdade) {
        this.sentenca = sentenca;
        this.letra = letra;
        this.verdade = verdade;
    }

    public String getLetra() {
        return letra;
    }

    public void setLetra(String letra) {
        this.letra = letra;
    }

    public String getSentenca() {
        return sentenca;
    }

    public void setSentenca(String sentenca) {
        this.sentenca = sentenca;
    }

    public boolean isVerdade() {
        return verdade;
    }

    public void setVerdade(boolean verdade) {
        this.verdade = verdade;
    }

}

marciosouzajunior, o grande problema é que a frase deve ser a entrada do usúario, e pode ser uma premissa simples ou composta como dei um exemplo.

Não sei se devo tratar a frase como um objeto.

Para ler uma preposição você poderia simplesmente fazer:

      String preposicao = JOptionPane.showInputDialog("Informe a preposição");
      String letra = JOptionPane.showInputDialog("Informe a letra");
      String verdade = JOptionPane.showInputDialog("Digite 'verdade' ou 'falso'");
      
      Preposicao X = new Preposicao(preposicao, letra, verdade.equals("verdade") ? true : false);

Para ler outras preposições você poderia trabalhar com um while e salvá-las numa lista, algo assim…

Farei alguns testes, qualquer coisa posto aqui.

Achei um código aqui do tempo da faculdade. É só teste hein…

Obs: só alterei o mapa pra bater com a sua frase…

import java.util.HashMap;
import java.util.Map;

public class TesteReplaceString {

	public static void main(String[] args) {
		
		Map<String, String> mapa = new HashMap<String, String>();
		
		mapa.put("carlos foi a festa", "P");
		mapa.put("carlos também", "P");
		mapa.put("carlos não foi a festa", "~P");
		mapa.put("mas carlos não", "^ ~P");
		mapa.put("sara foi a festa", "Q");
		mapa.put("sara também", "Q");
		mapa.put("sara não foi a festa", "~Q");
		mapa.put("mas sara não", "^ ~Q");
		mapa.put("mas sara foi", "^ Q");
		mapa.put("E", "^");
		
		
		String s = "carlos não foi a festa mas sara foi";
		
		char vetor[] = s.toCharArray();
		
		StringBuffer sb = new StringBuffer();

		for (char c : vetor) {
			sb.append(c);
			if (mapa.get(sb.toString().trim()) != null) {
				s = s.replace(sb.toString().trim(), mapa.get(sb.toString().trim()));
				sb = new StringBuffer();
			}
			
		}
		System.out.println(s);
	}

}

Nesse caso eu tenho que mapear todas as situações possíveis.