Буферный аргумент open (), похоже, игнорируется при работе с текстовым вводом / выводом

//basic code non strack algorithm just started learning java ignore space and time.
/// {[()]}[][]{}
// {[( -a -> }]) -b -> replace a(]}) -> reverse a( }]))-> 
//Split string to substring {[()]}, next [], next [], next{}

public class testbrackets {
    static String stringfirst;
    static String stringsecond;
    static int open = 0;
    public static void main(String[] args) {
        splitstring("(()){}()");
    }
static void splitstring(String str){

    int len = str.length();
    for(int i=0;i<=len-1;i++){
        stringfirst="";
        stringsecond="";
        System.out.println("loop starttttttt");
        char a = str.charAt(i);
    if(a=='{'||a=='['||a=='(')
    {
        open = open+1;
        continue;
    }
    if(a=='}'||a==']'||a==')'){
        if(open==0){
            System.out.println(open+"started with closing brace");
            return;
        }
        String stringfirst=str.substring(i-open, i);
        System.out.println("stringfirst"+stringfirst);
        String stringsecond=str.substring(i, i+open);
        System.out.println("stringsecond"+stringsecond);
        replace(stringfirst, stringsecond);

        }
    i=(i+open)-1;
    open=0;
    System.out.println(i);
    }
    }
    static void replace(String stringfirst, String stringsecond){
        stringfirst = stringfirst.replace('{', '}');
        stringfirst = stringfirst.replace('(', ')');
        stringfirst = stringfirst.replace('[', ']');
        StringBuilder stringfirst1 = new StringBuilder(stringfirst);
        stringfirst = stringfirst1.reverse().toString();
    System.out.println("stringfirst"+stringfirst);
    System.out.println("stringsecond"+stringsecond);
if(stringfirst.equals(stringsecond)){
    System.out.println("pass");
}
    else{
        System.out.println("fail");
        System.exit(0);
        }
    }
}
1
задан Simón Ramírez Amaya 17 January 2019 в 16:37
поделиться

1 ответ

1112 Я немного повозился. Действительно, в документации говорится:

буферизация является необязательным целым числом, используемым для установки политики буферизации. Пропуск 0, чтобы отключить буферизацию (разрешено только в двоичном режиме), 1, чтобы выбрать буферизацию строки (можно использовать только в текстовом режиме), и целое число> 1, чтобы указать размер в байтах буфера фрагмента фиксированного размера ... ]

Следовательно, было бы разумно ожидать, что указание buffering=2 приведет к использованию буфера размером 2B (и при использовании этого буфера файлы будут сброшены). Однако в текстовом режиме это, кажется, (и документация не совсем ясно указывает, что в этом месте) влияет на подчеркивание BufferedWriter, но TextIOWrapper, чье write() вы в конечном итоге вызываете, по-прежнему «свое дело». .. Начиная с Python 3.7, вы говорите ему не делать этого и немедленно передаете записи в базовый объект, вызывая f.reconfigure(write_through=True) в файле, который вы открыли.


На самом деле весь код и проверки значения write_through уже есть в Python 3.6 (я проверял 3.6.8) (на самом деле _io_TextIOWrapper_write_impl, то есть _io.TextIOWrapper.write, идентичны в обе версии), но атрибут write_through не раскрывается (пока).

0
ответ дан Ondrej K. 17 January 2019 в 16:37
поделиться
Другие вопросы по тегам:

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