Java 给for循环取名 name : for(;;){break name;}

查看java.io.BufferedReader的readLine方法时发现 :
for循环还可以取名
源码如下👇

    String readLine(boolean ignoreLF, boolean[] term) throws IOException {
        StringBuilder s = null;
        int startChar;

        synchronized (lock) {
            ensureOpen();
            boolean omitLF = ignoreLF || skipLF;
            if (term != null) term[0] = false;

        bufferLoop:
            for (;;) {

                if (nextChar >= nChars)
                    fill();
                if (nextChar >= nChars) { /* EOF */
                    if (s != null && s.length() > 0)
                        return s.toString();
                    else
                        return null;
                }
                boolean eol = false;
                char c = 0;
                int i;

                /* Skip a leftover '\n', if necessary */
                if (omitLF && (cb[nextChar] == '\n'))
                    nextChar++;
                skipLF = false;
                omitLF = false;

            charLoop:
                for (i = nextChar; i < nChars; i++) {
                    c = cb[i];
                    if ((c == '\n') || (c == '\r')) {
                        if (term != null) term[0] = true;
                        eol = true;
                        break charLoop;
                    }
                }

                startChar = nextChar;
                nextChar = i;

                if (eol) {
                    String str;
                    if (s == null) {
                        str = new String(cb, startChar, i - startChar);
                    } else {
                        s.append(cb, startChar, i - startChar);
                        str = s.toString();
                    }
                    nextChar++;
                    if (c == '\r') {
                        skipLF = true;
                    }
                    return str;
                }

                if (s == null)
                    s = new StringBuilder(defaultExpectedLineLength);
                s.append(cb, startChar, i - startChar);
            }
        }
    }

总结就是

name : for(;;){break name;}
name : while(true){break name;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 以下是使用C语言读写ini文件的完整源代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 int getValueFromIniFile(const char* filename, const char* section, const char* key, char* value) { FILE* file = fopen(filename, "r"); if (file == NULL) { printf("Failed to open file %s\n", filename); return 0; } char currentSection[MAX_LINE_LENGTH] = ""; char line[MAX_LINE_LENGTH]; int foundSection = 0; while (fgets(line, sizeof(line), file) != NULL) { // Remove newline character at the end line[strcspn(line, "\n")] = '\0'; // Check if it is a section if (line[0] == '[' && line[strlen(line)-1] == ']') { strncpy(currentSection, line+1, strlen(line)-2); currentSection[strlen(line)-2] = '\0'; if (strcmp(currentSection, section) == 0) { foundSection = 1; } else { foundSection = 0; } } else if (foundSection) { // Check if it is the desired key char* delimiter = strchr(line, '='); if (delimiter != NULL) { // Split the line into key and value char currentKey[MAX_LINE_LENGTH] = ""; strncpy(currentKey, line, delimiter - line); currentKey[delimiter - line] = '\0'; if (strcmp(currentKey, key) == 0) { strncpy(value, delimiter + 1, MAX_LINE_LENGTH); value[strcspn(value, "\n")] = '\0'; // Remove newline character fclose(file); return 1; } } } } fclose(file); return 0; } int setValueToIniFile(const char* filename, const char* section, const char* key, const char* value) { FILE* file = fopen(filename, "r"); if (file == NULL) { printf("Failed to open file %s\n", filename); return 0; } // Create a temporary file for writing FILE* tempFile = fopen("temp.ini", "w"); if (tempFile == NULL) { printf("Failed to create temporary file\n"); fclose(file); return 0; } char currentSection[MAX_LINE_LENGTH] = ""; char line[MAX_LINE_LENGTH]; int foundSection = 0; int keyFoundInSection = 0; int valueWritten = 0; while (fgets(line, sizeof(line), file) != NULL) { // Check if it is a section if (line[0] == '[' && line[strlen(line)-1] == ']') { strncpy(currentSection, line+1, strlen(line)-2); currentSection[strlen(line)-2] = '\0'; if (strcmp(currentSection, section) == 0) { foundSection = 1; } else { foundSection = 0; } fprintf(tempFile, "%s", line); } else if (foundSection) { // Check if it is the desired key char* delimiter = strchr(line, '='); if (delimiter != NULL) { // Split the line into key and value char currentKey[MAX_LINE_LENGTH] = ""; strncpy(currentKey, line, delimiter - line); currentKey[delimiter - line] = '\0'; if (strcmp(currentKey, key) == 0) { fprintf(tempFile, "%s=%s\n", key, value); keyFoundInSection = 1; valueWritten = 1; } else { fprintf(tempFile, "%s", line); } } else { fprintf(tempFile, "%s", line); } } else { fprintf(tempFile, "%s", line); } } // If the key is not found, append it at the end of the section if (!keyFoundInSection) { fprintf(tempFile, "%s=%s\n", key, value); valueWritten = 1; } fclose(file); fclose(tempFile); // Replace the original file with the updated temporary file if (valueWritten) { remove(filename); rename("temp.ini", filename); } else { remove("temp.ini"); } return 1; } int main() { // 读取ini文件 char value[MAX_LINE_LENGTH]; if (getValueFromIniFile("example.ini", "Section1", "Key1", value)) { printf("Value found: %s\n", value); } else { printf("Value not found\n"); } // 写入ini文件 if (setValueToIniFile("example.ini", "Section1", "Key1", "NewValue")) { printf("Value updated\n"); } else { printf("Failed to update value\n"); } return 0; } ``` 以上代码为一个简单的读写ini文件的示例。通过`getValueFromIniFile`函数可以从指定的ini文件中获取指定的section和key的值,通过`setValueToIniFile`函数可以更新或添加ini文件中指定section和key的值。可根据实际需要修改和使用此代码。请确保在使用前要确保文件存在且有读写权限。 ### 回答2: ini文件是一种常见的文本文件格式,用于存储配置信息。读写ini文件可以通过解析文件的内容来获取配置项的值,也可以通过修改文件中的值来修改配置项。 以下是一个简单的读写ini文件的示例代码: ```python import configparser # 创建一个ConfigParser对象 config = configparser.ConfigParser() # 读取ini文件 config.read('config.ini') # 获取配置项的值 value = config.get('section_name', 'key_name') # section_name为节名,key_name为键名 # 修改配置项的值 config.set('section_name', 'key_name', 'new_value') # section_name为节名,key_name为键名,new_value为新值 # 保存修改后的ini文件 with open('config.ini', 'w') as configfile: config.write(configfile) ``` 在这个示例代码中,首先通过导入`configparser`模块创建了一个`ConfigParser`对象。然后使用`read()`方法读取了名为`config.ini`的ini文件。 通过调用`get()`方法可以获取`config.ini`文件中`section_name`节下`key_name`键的值。 通过调用`set()`方法可以将`section_name`节下`key_name`键的值修改为`new_value`。 最后,可以使用`write()`方法将修改后的配置信息写入到`config.ini`文件中。 需要注意的是,以上代码只是一个简单的示例,实际使用时需要根据具体的需求和ini文件的结构来进行相应的修改和处理。 ### 回答3: 以下是一个使用C语言读写ini文件的完整源码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_SIZE 256 // 读取ini文件 int readIniFile(const char* filename, const char* section, const char* key, char* value) { FILE* file = fopen(filename, "r"); if (file == NULL) { printf("无法打开ini文件\n"); return -1; } char line[MAX_LINE_SIZE]; char currentSection[MAX_LINE_SIZE]; char currentKey[MAX_LINE_SIZE]; int foundSection = 0; int foundKey = 0; while (fgets(line, MAX_LINE_SIZE, file) != NULL) { // 移除换行符 line[strcspn(line, "\n")] = '\0'; // 处理注释和空行 if (line[0] == '#' || line[0] == '\0') { continue; } // 处理section if (line[0] == '[') { if (foundSection) { printf("找到了指定的section,但没有找到指定的key\n"); return -1; } sscanf(line, "[%[^]]", currentSection); if (strcmp(currentSection, section) == 0) { foundSection = 1; } } else if (foundSection) { sscanf(line, "%[^= ] = %[^\n]", currentKey, value); if (strcmp(currentKey, key) == 0) { foundKey = 1; break; } } } fclose(file); if (foundSection && foundKey) { return 0; } else { printf("没有找到指定的section或key\n"); return -1; } } // 写入ini文件 int writeIniFile(const char* filename, const char* section, const char* key, const char* value) { FILE* file = fopen(filename, "a"); if (file == NULL) { printf("无法打开ini文件\n"); return -1; } fprintf(file, "\n[%s]\n%s = %s\n", section, key, value); fclose(file); return 0; } int main() { char value[MAX_LINE_SIZE]; // 读取ini文件 if (readIniFile("config.ini", "section1", "key1", value) == 0) { printf("value1: %s\n", value); } // 写入ini文件 if (writeIniFile("config.ini", "section2", "key2", "value2") == 0) { printf("成功写入ini文件\n"); } return 0; } ``` 以上源码中的readIniFile函数用于读取指定section和key对应的value,writeIniFile函数用于向ini文件中写入新的section和key/value对。 使用main函数作为示例,打开名为"config.ini"的ini文件,并读取名为"section1"的section中的"key1"对应的value,并打印出来。然后向ini文件中写入一个名为"section2"的section,其中包含一个名为"key2"的key和"value2"的value。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值