java - if (string.contains) 在最终输出中混合变量放置

标签 java string contains

我正在编写一个程序来根据产品标题生成 html 元数据。该程序(目前)要求的只是产品标题和其他 2 个详细信息。这是当前不正确的输出:

Please paste model title.

(我的输入:布加迪威龙 1:18 蓝色)

<METANAME="DESCRIPTION"CONTENT="Shop for Bugatti diecast model cars at [WEBSITE REMOVED]">
<METANAME="ABSTRACT"CONTENT=Shop for diecast model cars at [WEBSITE REMOVED].
<METANAME="KEYWORDS"CONTENT=“diecast cars, diecast quality scale cars,
diecast model cars, model cars, collectible cars, Veyron diecast model, quality diecast   cars, diecast 1:18">

我想要的是:

Please paste model title.

(我的输入:布加迪威龙 1:18 蓝色)

<METANAME="DESCRIPTION"CONTENT="Shop for Bugatti Veyron 1:18 Blue diecast model cars at [WEBSITE REMOVED]">
<METANAME="ABSTRACT"CONTENT=Shop for diecast model cars at [WEBSITE REMOVED].
<METANAME="KEYWORDS"CONTENT=“diecast cars, diecast 1:18 scale cars,
diecast model cars, model cars, collectible cars, diecast model, Bugatti diecast cars, diecast Veyron">

请注意,差异在于标题不是标题,只是其中的一个单词。刻度被放在最后而不是应在的位置等。

为了避免发布 300 多行,代码被截断为:

import java.util.Scanner;
public class MetagenV3 {

public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    String title;
    String abstr = "Shop for diecast model cars at [WEBSITE REMOVED]";
    String scale;
    String diecastManu;
    String metaModel;
    String metaMake;
    String defaultstring = "quality";

    String[] metaMakesList = {"Abarth", "Acura", "Ahrens", "Alfa Romeo"
            +"Alpine Renault", "AMC", "American LaFrance", "Aprilia", "Aston Martin" 
            +"Audi", "Austin", "Austin-Healey", "Bedford", "Benelli", "Bentley", "BMW"
            +"Buffalo", "Bugatti", "Buick","Cadillac","Caterham", "Chaparrel"
            + "Checker","Chevrolet","Chrysler","Citroen", "Cleveland", "Cord","DAF"
            + "Daimler","Dakota","Datsun","Dauer"}; // ETC ETC

    String[] scaleList = {"1:12","1:18","1:24","1:32","1:43","1:64"}; // ETC ETC

    System.out.println("Please paste model title.");
    title = sc.next();

    if (title.toLowerCase().contains(metaMakesList[0].toLowerCase()))
    { metaMake = metaMakesList[0];}
    if (title.toLowerCase().contains(metaMakesList[1].toLowerCase()))
    { metaMake = metaMakesList[1];}
    if (title.toLowerCase().contains(metaMakesList[2].toLowerCase()))
    { metaMake = metaMakesList[2];}
    if (title.toLowerCase().contains(metaMakesList[3].toLowerCase()))
    { metaMake = metaMakesList[3];}
    if (title.toLowerCase().contains(metaMakesList[4].toLowerCase()))
    { metaMake = metaMakesList[4];}
    if (title.toLowerCase().contains(metaMakesList[5].toLowerCase()))
    { metaMake = metaMakesList[5];}
    // ETC, ETC

    else {
        metaMake = defaultstring;
    }

    if (title.toLowerCase().contains(scaleList[0].toLowerCase()))
    { scale = scaleList[0]; }
    if (title.toLowerCase().contains(scaleList[1].toLowerCase()))
    { scale = scaleList[1]; }
    if (title.toLowerCase().contains(scaleList[2].toLowerCase()))
    { scale = scaleList[2]; }
    if (title.toLowerCase().contains(scaleList[3].toLowerCase()))
    { scale = scaleList[3]; }
    // ETC, ETC

    else { scale = defaultstring;}

    System.out.println("Please paste model manufacturer.");
    diecastManu = sc.next();
    System.out.println("Please paste car model (e.g Skyline");
    metaModel = sc.next();


String fullOutput = "<METANAME="  + "\"DESCRIPTION\"" + "CONTENT=\"" + "Shop for " + title + " "
        + "diecast model cars at [WEBSITE REMOVED]\"" +">" + "\n"
            + "<METANAME="  + "\"ABSTRACT\"" + "CONTENT=" + abstr + "\n"
         +  "<METANAME="  + "\"KEYWORDS\"" + "CONTENT=" + "“diecast cars, diecast " + scale + " "
                + "scale cars," + "\n" + "diecast model cars, modelcars, collectable cars, "
         + diecastManu + " diecast"
                        + " model, " + metaMake + " diecast cars, diecast " + metaModel +"\">";

System.out.println(fullOutput);

}

}

此外它还忽略:

   System.out.println("Please paste model manufacturer.");
        diecastManu = sc.next();
        System.out.println("Please paste car model (e.g Skyline");
        metaModel = sc.next(); 

我知道这个问题很长而且不是很简单,但我想不出更好的方法来展示正在发生的事情。

最佳答案

看起来您的问题有多个层次,但您提到的第一个问题的标题很简单。

这段代码

System.out.println("Please paste model title.");
title = sc.next();

只会读取第一个单词。 Scanner.next() 将仅根据分隔符(默认为空格)读取第一个标记。

我建议您使用某种调试器(如果有的话)来浏览代码。如果做不到这一点,您应该添加一些打印语句来帮助查看代码正在做什么。

例如,如果您添加

System.out.println("Please paste model title.");
title = sc.next();
System.out.println("Title: " + title);

您将立即看到问题是程序未正确读取输入。

此外,这解释了为什么它似乎忽略制造商和汽车型号提示。它正在从模型标题中读取剩余的标记。

更新(见评论) 最后的 else 总是触发

if (title.toLowerCase().contains(scaleList[2].toLowerCase()))
{ scale = scaleList[2]; }
if (title.toLowerCase().contains(scaleList[3].toLowerCase()))
{ scale = scaleList[3]; }
else { scale = defaultstring;}

假设scaleList[2]是正确的。它将把scale设置为scaleList[2],然后评估下一个if语句。它将是错误的,检测 else block 并运行它。构建这些相关 if 语句的正确方法是

if (title.toLowerCase().contains(scaleList[2].toLowerCase()))
{ scale = scaleList[2]; }
else if (title.toLowerCase().contains(scaleList[3].toLowerCase()))
{ scale = scaleList[3]; }
else { scale = defaultstring;}

这样,一旦找到正确的比例,它将停止尝试匹配比例(这也与您的品牌相关)。

关于java - if (string.contains) 在最终输出中混合变量放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669445/

相关文章:

java Ant : does ant build files have a @var@ parameters and how to handle them?

java - 如何检查字符串是否包含搜索项

java - Java LinkedHashSet 包含方法的问题

c# - 按未选择的列排序

java - 查找小时范围是否重叠(无论日期如何)

java - 创建自己的脚手架插件 : Unable to locate scaffold/faces/metawidget-qbe. xml

java - 安卓旋转矩阵

java - Android 将 double 转换为字符串

java - 如何在 Java 中比较字符串?

python - 仅从字符串中提取某些单词并忽略带有数字等的单词