如何在编程时使用Calc(或Excel)减少重复代码编辑?

时间:2015-01-10 02:02:24

标签: java android development-environment editing

问题https://stackoverflow.com/questions/2797806/what-tricks-can-be-used-to-type-and-edit-code-faster因不具有建设性而被关闭,因此我将尽力使其得到具体答案。

我的问题是针对Android / Java的,但它适用于任何编程语言。

我有一些代码如下:

switch (view.getId()) {
case R.id.v_black:
    if (bgButtonIsSelected) {
        backgroundColor = getResources().getColor(R.color.black);
    } else {
        textColor = getResources().getColor(R.color.black);
    }
    break;
case R.id.v_white:
    if (bgButtonIsSelected) {
        backgroundColor = getResources().getColor(R.color.white);
    } else {
        textColor = getResources().getColor(R.color.white);
    }
    break;
}

现在我需要为所有其他颜色添加更多case个。所以在任何地方它都说“黑色”(或“白色”)我需要用其他颜色名称替换它。问题是,它们中有很多。我已经写过一次了,我不想再这样做了。

这是我在之前(在color.xml中)编写颜色的地方:

<color name="black">#000000</color>
<color name="white">#ffffff</color>

<color name="red_100">#ffcdd2</color>
<color name="red_200">#ef9a9a</color>
<color name="red_500">#f44336</color>
<color name="red_800">#c62828</color>
<color name="pink_100">#f8bbd0</color>
<color name="pink_200">#f48fb1</color>
<color name="pink_500">#e91e63</color>
<color name="pink_800">#ad1457</color>
<color name="purple_100">#e1bee7</color>
<color name="purple_200">#ce93d8</color>
<color name="purple_500">#9c27b0</color>
<color name="purple_800">#6a1b9a</color>
<color name="deep_purple_100">#d1c4e9</color>
<color name="deep_purple_200">#b39ddb</color>
<color name="deep_purple_500">#673ab7</color>
<color name="deep_purple_800">#4527a0</color>
<color name="indigo_100">#c5cae9</color>
<color name="indigo_200">#9fa8da</color>
<color name="indigo_500">#3f51b5</color>
<color name="indigo_800">#283593</color>
<color name="blue_100">#bbdefb</color>
<color name="blue_200">#90caf9</color>
<color name="blue_500">#2196f3</color>
<color name="blue_800">#1565c0</color>
<color name="light_blue_100">#b3e5fc</color>
<color name="light_blue_200">#81d4fa</color>
<color name="light_blue_500">#03a9f4</color>
<color name="light_blue_800">#0277bd</color>
<color name="cyan_100">#b2ebf2</color>
<color name="cyan_200">#80deea</color>
<color name="cyan_500">#00bcd4</color>
<color name="cyan_800">#00838f</color>
<color name="teal_100">#b2dfdb</color>
<color name="teal_200">#80cbc4</color>
<color name="teal_500">#009688</color>
<color name="teal_800">#00695c</color>
<color name="green_100">#c8e6c9</color>
<color name="green_200">#a5d6a7</color>
<color name="green_500">#4caf50</color>
<color name="green_800">#2e7d32</color>
<color name="light_green_100">#dcedc8</color>
<color name="light_green_200">#c5e1a5</color>
<color name="light_green_500">#8bc34a</color>
<color name="light_green_800">#558b2f</color>
<color name="lime_100">#f0f4c3</color>
<color name="lime_200">#e6ee9c</color>
<color name="lime_500">#cddc39</color>
<color name="lime_800">#9e9d24</color>
<color name="yellow_100">#fff9c4</color>
<color name="yellow_200">#fff59d</color>
<color name="yellow_500">#ffeb3b</color>
<color name="yellow_800">#f9a825</color>
<color name="amber_100">#ffecb3</color>
<color name="amber_200">#ffe082</color>
<color name="amber_500">#ffc107</color>
<color name="amber_800">#ff8f00</color>
<color name="orange_100">#ffe0b2</color>
<color name="orange_200">#ffcc80</color>
<color name="orange_500">#ff9800</color>
<color name="orange_800">#ef6c00</color>
<color name="deep_orange_100">#ffccbc</color>
<color name="deep_orange_200">#ffab91</color>
<color name="deep_orange_500">#ff5722</color>
<color name="deep_orange_800">#d84315</color>
<color name="brown_100">#d7ccc8</color>
<color name="brown_200">#bcaaa4</color>
<color name="brown_500">#795548</color>
<color name="brown_800">#4e342e</color>
<color name="grey_100">#f5f5f5</color>
<color name="grey_200">#eeeeee</color>
<color name="grey_500">#9e9e9e</color>
<color name="grey_800">#424242</color>
<color name="blue_grey_100">#cfd8dc</color>
<color name="blue_grey_200">#b0bec5</color>
<color name="blue_grey_500">#607d8b</color>
<color name="blue_grey_800">#37474f</color>

我知道我可以复制和粘贴,但有更快的方法吗?如何使用Calc或Excel加快此过程?

(下面的答案可以节省很多时间,我想我会与其他程序员分享。)

2 个答案:

答案 0 :(得分:4)

您不需要excel或calc,您需要正确构建您的编程。

private static Map<Integer, Integer> idToColor = new Map<Integer, Integer>(); 

//at init time
void initMap(){
    idToColor.add(R.id.v_white, R.color.v_white);
    //1 line per color
}

然后你的开关变为:

Integer color = idToColor.get(view.getId());
if(color != null){
    if (bgButtonIsSelected) {
        backgroundColor = getResources().getColor(color.getValue());
    } else {
        textColor = getResources().getColor(color.getValue());
    }
}

现在添加颜色为1行 - 将其添加到地图中。

答案 1 :(得分:0)

首先,您需要隔离已编写的颜色名称。它们目前采用以下格式:

<color name="COLOR_NAME">#80deea</color>

复制整个列表并将其粘贴到电子表格程序中无格式文本(Ctrl + Shift + V)。 (我使用LibreOffice Calc作为我的答案。我想这个过程与Excel类似。)&#34; Text Import&#34;应该弹出。在&#34;分隔&#34; /&#34;其他&#34;输入双引号(&#34;)。 (因为这就是颜色名称的周围。)说好。

enter image description here

现在第三列中有三个颜色名称的列。您可以删除第一列和第三列。我们已经隔离了颜色名称。

第二步是将这些名称放入我们代码中的正确位置。我们要插入的代码采用以下格式:

case R.id.v_COLOR_NAME:
if (bgButtonIsSelected) {
    backgroundColor = getResources().getColor(R.color.COLOR_NAME);
} else {
    textColor = getResources().getColor(R.color.COLOR_NAME);
}
break;

取出换行符,使它像这样在一行:

case R.id.v_COLOR_NAME: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.COLOR_NAME);} else { textColor = getResources().getColor(R.color.COLOR_NAME);} break;

有三个COLOR_NAME个位置,因此将该行分为四个部分。复制每个零件并将其粘贴到Calc的列顶部。然后将这四个单元格一直复制到每个颜色名称。

enter image description here

现在位于右上方的行(我将使用上一张图片中的H列。)编写以下公式以将所有部分连接在一起:

=D1&B1&E1&B1&F1&B1&G1

其中B列是COLOR_NAME,D,E,F和G列是代码的四个部分。将此单元格中的公式一直复制下来。现在,当我复制这个专栏时,它给了我

"case R.id.v_red_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_100);} else {  textColor = getResources().getColor(R.color.red_100);} break;"
"case R.id.v_red_200: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_200);} else {  textColor = getResources().getColor(R.color.red_200);} break;"
"case R.id.v_red_500: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_500);} else {  textColor = getResources().getColor(R.color.red_500);} break;"
"case R.id.v_red_800: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.red_800);} else {  textColor = getResources().getColor(R.color.red_800);} break;"
"case R.id.v_pink_100: if (bgButtonIsSelected) {backgroundColor = getResources().getColor(R.color.pink_100);} else {    textColor = getResources().getColor(R.color.pink_100);} break;"
...

嗯... Calc把它放在引号中所以我需要删除它们。我将所有内容粘贴到LibreOffice Writer(或Word或您使用的任何内容)中,并将"case替换为case,将break;"替换为break;。 (我可以使用Writer支持的正则表达式,但我总是忘记行的开头和结尾的表达式。这样做比在StackOverflow上查找更快。)

最后,您可以将所有这些内容放到代码编辑器中。如果您的编辑器有任何好处,它将自动格式化它应该是。 (Eclipse中的Cntl + Shift + F。)

Tadaa!随着我一直保存,我有时间为您完成本教程。我希望别人能像我一样享受它。