如何用变量

时间:2015-12-13 07:08:52

标签: java

我想替换运算符之间的字符串。鉴于andornot分别代表^v~。以下代码仅替换所有and^

import java.util.Scanner;

public class Paragraphconv
{

    public static void main(String[] args) {

        System.out.println("Enter a paragraph ");

        Scanner scanF = new Scanner(System.in);

        String str = scanF.nextLine();
        String newStr = str.replace("and", "^");

        System.out.println(newStr);

    }
}

我尝试过使用replace()方法,我只能将运算符替换为符号,同时保留句子。

应该发生的是:

INPUT

  

狗饿了,人类给它食物。本和托比和玛丽亚是   好朋友。你想要你的咖啡苦还是甜?我不再喜欢你了。

输出

x ^ y 
x ^ y ^ z
x v y
~x

我还没有尝试将句子改为变量,因为我不知道应该包括什么。 (注意,上面的给定字符串是无意义的并且由用户输入,即不固定)

1 个答案:

答案 0 :(得分:0)

直接replace不会这样做,如帖子的评论中所述。更好的方法是使用regular expressions来分割每个句子。在Java中,它使用PatternMatcher

完成

我会分2个阶段执行这样的任务:

  1. 将段落拆分为句子。一种简化的方法是,例如,用分隔符分割字符串。':

    /* note that split accepts a regex as parameter, so we need to escape '.'' */
    String[] sentences = paragraph.split("\\.");
    for(String sentence : sentences)
        System.out.println(handleSentence(sentence));
    
  2. 现在,对于主要部分,用正则表达式解析每个句子并处理递归中句子的每个部分:

    import java.util.regex.Pattern;
    /* ... */
    
    String handleSentence(String s) {
        Pattern andPattern = Pattern.compile("(.*) and (.*)");
        Pattern notPattern = Pattern.compile("not (.*)");
        /* patterns for the rest of the operators here... */
        Matcher m;
        m = andPattern.matcher(s);
        if (m.matches()){
            /* we have an "and" sentence */
            String preAnd = m.group(1);
            String postAnd = m.group(2);
            String res = "(" + handleSentence(preAnd) + "^" + handleSentence(postAnd) + ")";
            return res;
        }
        m = notPattern.matcher(s);
        if (m.matches()){
            /* we have a "not" sentent */
            String postNot = m.group(1);
            String res = "~" + handleSentence(postNot);
            return res;
        }
    
        /* and so on ... */
    
        /*
        if there's no match, just convert it to xyz etc.
        nextAvailableVar will check what is the next variable name that is not used
        and return it as a String
        */
    
        return nextAvailableVar();
    }
    
  3. 现在,这段代码并不完整,并且可能有更有效的方法,但它应该让您了解如何执行此类任务。