根据给定的正则表达式检查句子并替换“<”用“不到”字

时间:2016-01-06 15:32:34

标签: java regex replace char

请阅读代码中的注释。不同的场景......如果任何人能告诉我其他解决方案来实现同样的目标,那就太棒了。 请阅读代码中的注释。不同的场景......如果任何人能告诉我其他解决方案来实现同样的目标,那就太棒了。

package parsexml.matcher;

import java.util.Scanner;

public class BackUp {

    // 1. input : if the quantity a < 90 and b > 90 then click on < ok >
    // 1. output :if the quantity a less than 90 and b greater than 90 then click on < ok >
    // 2.if the quantity a > 90 or a < 90 then click on < submit>
    // 2. output : if the quantity a greater than 90 or a less than 90 then click on < submit>
    // etc .from 3- 9 , i get the expected output
    // 3. if the quantity a> b then click on <submit>
    // 4. if the quantity a > b or a < c then click on < submit>
    // 5. if the quantity a < 90 then click on <submit>
    // 6. if the quantity a > 90 then click on <submit>
    // 7. if the quantity a < b then click on <submit>
    // 8. if the quantity a > b then click on < submit >
    //9. validate a < 100 in the expression and press < click >

    // 10. if amount  < fd then if price > 80 click on < submit >
    public static void main(String[] arg) {

        String inputText;
        String outputText = "";
        String greater = "";
        Scanner s = new Scanner(System.in);
        inputText = s.nextLine();
        if (inputText.contains("<")) {
            outputText = inputText.replaceAll("(\\w+)\\s*<\\s*(\\w++(?!\\s*>))", "$1 less than $2");
            // System.out.print("\n"+outputText);

        }
        if (outputText.contains(">")) {

            greater = outputText.replaceAll("(\\w+)\\s*>\\s*(\\w++(?!\\s*>))", "$1 greater than $2");
            System.out.print("\n" + greater);

        }
        if (outputText.contains(">"))
            return;
        else if (inputText.contains(">")) {
            String greater2;
            greater2 = inputText.replaceAll("(\\w+)\\s*>\\s*(\\w++(?!\\s*>))", "$1 greater than $2");
            System.out.print("\n" + greater2);
        } else
            return;
    }

}

3 个答案:

答案 0 :(得分:1)

根据您提供的示例,您似乎尝试使用<替换任何less than后跟空格(或可能是字符串的结尾):

a.replaceAll("<(?= |$)", "less than");

根据评论进行修改。

如果您要替换任何<后跟可选空格,请输入数字:

a.replaceAll("<(?=\s*\d)", "less than");

答案 1 :(得分:1)

如果您确定&#34;小于&#34;之前和之后总是有空格。签字,然后这个:

String test = a.replace("<", "less than");

可以替换为:

String test = a.replace(" < ", " less than ");

答案 2 :(得分:1)

假设你可以在<周围有空白符号,<>内的子串也可以在里面有空格(比如< play >),你可以使用

(\w+)\s*<\s*(\w++(?!\s*>))

并替换为$1 less than $2。正则表达式匹配......

  • (\w+) - (第1组)一个或多个字母数字和下划线字符
  • \s* - 零个或多个空格
  • < - 文字<字符
  • `\ s * - 零个或多个空格
  • (\w++(?!\s*>)) - 一个或多个未跟随可选空格和结束>的单词字符。 注意 ++占有量词是非常重要的,因为它会关闭回溯并且只强制在找到{{1>后找到的最后一个字符后运行前瞻}}。

请参阅IDEONE demo

\w++

结果:

String str = " <play> a < b  <play> at < button >\n <play> a < 90 <play> at < button >";
System.out.println(str.replaceAll("(\\w+)\\s*<\\s*(\\w++(?!\\s*>))", "$1 less than $2"));

更新

<play> a less than b <play> at < button > <play> a less than 90 <play> at < button > 使用

greater than

请参阅another demo