Как я могу сгенерировать метод toString () из полей?

У меня есть класс Java, который содержит такие поля:

private int port;
private String portName;
private ArrayList portList;
private int id;

Мне нужна команда или сценарий, чтобы я мог напрямую вставить вышеуказанный блок в терминал и передать его в качестве входных данных для этой команды или сценария и дать мне следующий вывод:

public String toString() {
    return "{ " + "port=" + port + ",portName=" + portName + ",portList=" + portList + ",id=" + id + "}";
}
2
задан 26 November 2017 в 13:26

3 ответа

Онлайнер, использующий awk (т. Е. GNU Awk):

awk 'BEGIN{printf"public String toString() {\n    return \"{ \""}{gsub(";$","");printf" + \"";if(NR>1){printf","};printf$3"=\" + "$3}END{print" + \"}\";\n}"}'

Используйте его следующим образом:

$ awk 'BEGIN{printf"public String toString() {\n    return \"{ \""}{gsub(";$","");printf" + \"";if(NR>1){printf","};printf$3"=\" + "$3}END{print" + \"}\";\n}"}' <<EOF
> private int port;
> private String portName;
> private ArrayList portList;
> private int id;
> EOF
public String toString() {
    return "{ " + "port=" + port + ",portName=" + portName + ",portList=" + portList + ",id=" + id + "}";
}

Версия скрипта с поясняющим комментарием

#!/usr/bin/awk -f
# do the following before processing the text
BEGIN {
  # print this text, '\n' is a line break and '\"' a literal '"'
  printf "public String toString() {\n    return \"{ \""
}
{
  # remove semicolon at the end of the line
  gsub(";$","");
  # print ' + "'
  printf " + \"";
  # if the line number is > 1 print ','
  if (NR > 1) { printf "," };
  # print the third row followed by '=" + ' and the third row again
  printf $3"=\" + "$3
}
# do the following after processing the text
END {
  # print ' + "}";\n}', '\n' is a line break
  print " + \"}\";\n}"
}

Сохраните как generate_toString, сделайте его исполняемым с chmod +x generate_toString и используйте его следующим образом:

$ ./generate_toString <<EOF
> private int port;
> private String portName;
> private ArrayList portList;
> private int id;
> EOF
public String toString() {
    return "{ " + "port=" + port + ",portName=" + portName + ",portList=" + portList + ",id=" + id + "}";
}

Хотя это и делает то, что вы просили, для решения вашей реальной проблемы есть далеко лучшие подходы см. @DavidFoerster , а также комментарий @nickb выше. Нет необходимости изобретать велосипед.

3
ответ дан 26 November 2017 в 13:26

Я думаю, это то, что вы хотите.

#!/bin/bash
# Create Java toString() method from stdin.

while read line; do
    word_last="${line##* }"
    name="${word_last%;}"
    if [[ $pairs ]]; then
        printf -v pair '",%s=" + %s + ' "$name" "$name"
    else
        printf -v pair '"%s=" + %s + ' "$name" "$name"
    fi
    pairs+="$pair"
done

printf '%s\n' 'public String toString() {'
printf '    return "{ " + %s"}";\n' "$pairs"
printf '%s\n' '}'

Звоните так:

$ bash create_java_toString.sh << EOF
> private int port;
> private String portName;
> private ArrayList portList;
> private int id;
> EOF
public String toString() {
    return "{ " + "port=" + port + ",portName=" + portName + ",portList=" + portList + ",id=" + id + "}";
}

Больше примеров:

$ bash create_java_toString.sh << EOF
> private int i;
> private int j;
> EOF
public String toString() {
    return "{ " + "i=" + i + ",j=" + j + "}";
}
$ bash create_java_toString.sh << EOF
> EOF
public String toString() {
    return "{ " + "}";
}
3
ответ дан 26 November 2017 в 13:26
  • 1
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30
  • 2
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30
  • 3
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30
  • 4
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30
  • 5
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30
  • 6
    @Emerald214: это указывает, что Гостевые Дополнения еще не установлены в госте Windows7. – Takkat 21 May 2012 в 10:30

Я не знаю, как вы собираетесь использовать эти сценарии, но это должно привести вас в правильном направлении:

#!/usr/bin/env bash

# get the argumetenst from the command line

# Sample terminal usage
# tostring -p port -n portName -l portLiat -i id


echo ""
echo ""

while getopts :p:n:l:i: option
do
        case "${option}" in
                p) port=${OPTARG};;
                n) portName=${OPTARG};;
                l) portList=${OPTARG};;
                i) id=${OPTARG};;
                \?) 
                        echo ""
                        echo -e "\e[0;31m Please supply the required values: $OPTARG \e[0m" 1>&2 
                        echo ""
                        echo " Usage: tostring -p port -n portName -l portList -i id"
                        echo ""
                        exit 1
                        ;;
                : )
                        echo "Invalid option $OPTARG requires an argument" 1>&2
                        ;;
        esac
done
shift $((OPTIND -1))

echo ""
echo ""

echo -e "\e[0;33m public String toString() {"
echo -e "       return "{ " + "port=" + "$port" + ",portName=" + "$portName" + ",portList=" + "$portList" + ",id=" + "$id" "}";"
echo ""
echo ""
echo -e "}"
echo -e "\e[0m"

Дополнительная информация:

https: // sookocheff.com/post/bash/parsing-bash-script-arguments-with-shopts/

1
ответ дан 26 November 2017 в 13:26

Другие вопросы по тегам:

Похожие вопросы: